アップデート:
JDK のシリアル化メソッドを使用する場合は注意が必要です。パフォーマンスは良くなく、クラスを少し変更すると、データを逆シリアル化できなくなります。
scala/pickling を使用しましたが、シリアル化/逆シリアル化中にグローバル ロックが発生します。
したがって、それを使用する代わりに、次のような独自のシリアライゼーション/デシリアライゼーション コードを記述します。
import java.io._
object Serializer {
def serialize[T <: Serializable](obj: T): Array[Byte] = {
val byteOut = new ByteArrayOutputStream()
val objOut = new ObjectOutputStream(byteOut)
objOut.writeObject(obj)
objOut.close()
byteOut.close()
byteOut.toByteArray
}
def deserialize[T <: Serializable](bytes: Array[Byte]): T = {
val byteIn = new ByteArrayInputStream(bytes)
val objIn = new ObjectInputStream(byteIn)
val obj = objIn.readObject().asInstanceOf[T]
byteIn.close()
objIn.close()
obj
}
}
これを使用する例を次に示します。
case class Example(a: String, b: String)
val obj = Example("a", "b")
val bytes = Serializer.serialize(obj)
val obj2 = Serializer.deserialize[Example](bytes)