1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
trait Foo {
@transient protected var load = 1
@transient protected var a = 12
protected def init[B](in: java.io.ObjectInputStream) {
in.defaultReadObject
load = in.readInt
val sizea = in.readInt
a = 12
}
protected def serializeTo(out: java.io.ObjectOutputStream) {
out.defaultWriteObject
out.writeInt(load)
out.writeInt(a)
}
}
class Bar extends Foo with Serializable {
@transient protected var first: Any = null
def size = a
@transient var second: Any = null
def checkMember { if (first == null) print("") }
private def writeObject(out: java.io.ObjectOutputStream) {
serializeTo(out)
}
private def readObject(in: java.io.ObjectInputStream) {
first = null
init(in)
}
}
object Test {
private def toObject[A](bytes: Array[Byte]): A = {
val in = new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(bytes))
in.readObject.asInstanceOf[A]
}
private def toBytes(o: AnyRef): Array[Byte] = {
val bos = new java.io.ByteArrayOutputStream
val out = new java.io.ObjectOutputStream(bos)
out.writeObject(o)
out.close
bos.toByteArray
}
def main(args: Array[String]) {
val a1 = new Bar()
val serialized:Array[Byte] = toBytes(a1)
val deserialized: Bar = toObject(serialized)
deserialized.size
deserialized.checkMember
}
}
|