scala class 序列化
时间: 2023-07-28 15:01:29 浏览: 154
在 Scala 中,可以使用 Java 的序列化机制对类进行序列化操作。要使类可序列化,需要满足以下条件:
1. 类必须实现 Serializable 接口。
2. 所有非瞬态(non-transient)实例字段都必须是可序列化的。
3. 如果父类是可序列化的,子类也必须是可序列化的。
以下是一个示例:
```scala
import java.io.{ObjectInputStream, ObjectOutputStream}
class Person(val name: String, val age: Int) extends Serializable {
private var ssn: Int = _
def setSSN(ssn: Int) {
this.ssn = ssn
}
def getSSN(): Int = {
ssn
}
private def writeObject(out: ObjectOutputStream): Unit = {
out.defaultWriteObject()
out.writeInt(ssn)
}
private def readObject(in: ObjectInputStream): Unit = {
in.defaultReadObject()
ssn = in.readInt()
}
}
```
在上面的示例中,我们定义了一个名为 Person 的类,它实现了 Serializable 接口。该类具有一个名为 ssn 的私有字段,用于存储社会安全号码。该类还实现了 writeObject 和 readObject 方法,以便在序列化和反序列化过程中对 ssn 字段进行处理。
要将一个 Person 对象序列化到文件中,可以使用以下代码:
```scala
import java.io.{FileOutputStream, ObjectOutputStream}
val person = new Person("Alice", 25)
person.setSSN(123456789)
val oos = new ObjectOutputStream(new FileOutputStream("person.ser"))
oos.writeObject(person)
oos.close()
```
要从文件中反序列化一个 Person 对象,可以使用以下代码:
```scala
import java.io.{FileInputStream, ObjectInputStream}
val ois = new ObjectInputStream(new FileInputStream("person.ser"))
val person = ois.readObject().asInstanceOf[Person]
ois.close()
println(person.name)
println(person.age)
println(person.getSSN())
```
以上就是 Scala 中类的序列化与反序列化的基本方法。
阅读全文