Skip to content

Instantly share code, notes, and snippets.

@ramn
Last active February 26, 2025 11:43

Revisions

  1. ramn revised this gist May 14, 2013. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions Deserialization.scala
    Original file line number Diff line number Diff line change
    @@ -7,6 +7,7 @@ class Animal(name: String, age: Int) extends Serializable {

    case class Person(name: String)

    // or fork := true in sbt
    class ObjectInputStreamWithCustomClassLoader(
    fileInputStream: FileInputStream
    ) extends ObjectInputStream(fileInputStream) {
  2. ramn revised this gist May 13, 2013. 1 changed file with 10 additions and 1 deletion.
    11 changes: 10 additions & 1 deletion Deserialization.scala
    Original file line number Diff line number Diff line change
    @@ -7,9 +7,18 @@ class Animal(name: String, age: Int) extends Serializable {

    case class Person(name: String)

    class ObjectInputStreamWithCustomClassLoader(
    fileInputStream: FileInputStream
    ) extends ObjectInputStream(fileInputStream) {
    override def resolveClass(desc: java.io.ObjectStreamClass): Class[_] = {
    try { Class.forName(desc.getName, false, getClass.getClassLoader) }
    catch { case ex: ClassNotFoundException => super.resolveClass(desc) }
    }
    }

    object MyDeserialize extends App {
    val fis = new FileInputStream("../a.tmp")
    val ois = new ObjectInputStream(fis)
    val ois = new ObjectInputStreamWithCustomClassLoader(fis)

    val animal = ois.readObject
    val person = ois.readObject
  3. ramn created this gist May 13, 2013.
    19 changes: 19 additions & 0 deletions Deserialization.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,19 @@
    import java.io._

    @SerialVersionUID(15L)
    class Animal(name: String, age: Int) extends Serializable {
    override def toString = s"Animal($name, $age)"
    }

    case class Person(name: String)

    object MyDeserialize extends App {
    val fis = new FileInputStream("../a.tmp")
    val ois = new ObjectInputStream(fis)

    val animal = ois.readObject
    val person = ois.readObject
    ois.close
    println(animal)
    println(person)
    }
    18 changes: 18 additions & 0 deletions Serialization.scala
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    import java.io.FileOutputStream
    import java.io.ObjectOutputStream

    @SerialVersionUID(15L)
    class Animal(name: String, age: Int) extends Serializable {
    override def toString = s"Animal($name, $age)"
    }

    case class Person(name: String) extends Serializable

    object MySerialize extends App {
    val fos = new FileOutputStream("../a.tmp")
    val oos = new ObjectOutputStream(fos)

    oos.writeObject(new Animal("Dvorak", 12))
    oos.writeObject(Person("Dijkstra"))
    oos.close
    }