Skip to content

Instantly share code, notes, and snippets.

@ramn
Last active October 18, 2023 17:42
Show Gist options
  • Save ramn/5566596 to your computer and use it in GitHub Desktop.
Save ramn/5566596 to your computer and use it in GitHub Desktop.
Object serialization example in Scala
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)
// or fork := true in sbt
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 ObjectInputStreamWithCustomClassLoader(fis)
val animal = ois.readObject
val person = ois.readObject
ois.close
println(animal)
println(person)
}
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
}
@owlab-exp
Copy link

Thank you very much!

@BorderCloud
Copy link

BorderCloud commented Nov 18, 2020

Awesome, this worked perfectly for me!

+1 Bravo

@ArulselvanMadhavan
Copy link

@ramn This worked like a charm. I tried all other suggestions like pointing the jar via "spark.jars" but it didn't work. Did anyone ever figure out why we need this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment