File: t3038d.scala

package info (click to toggle)
scala 2.9.2%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 67,252 kB
  • ctags: 6,602
  • sloc: java: 27,488; xml: 4,412; python: 2,297; sh: 734; makefile: 16; ansic: 6
file content (60 lines) | stat: -rw-r--r-- 1,342 bytes parent folder | download | duplicates (2)
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
59
60
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)
  }
}


@serializable
class Bar extends Foo {
  @transient protected var first: Any = null
  def size = a
  @transient var second: Any = null
    
  def checkMember { first }
    
  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
  }
}