二进制序列化 – 替换scala 2.10上的Marshal
发布时间:2020-12-16 18:28:21 所属栏目:安全 来源:网络整理
导读:我如何将这个旧代码迁移到 scala 2.10,因为 scala.util.Marshal已被弃用? object Serilaizer{ def objectToBytes[T](foo: T)(implicit expected: ClassManifest[T]): Array[Byte] = { Marshal.dump(foo) } def bytesToObject[T](fooBytes: Array[Byte])(imp
|
我如何将这个旧代码迁移到
scala 2.10,因为
scala.util.Marshal已被弃用?
object Serilaizer{
def objectToBytes[T](foo: T)(implicit expected: ClassManifest[T]): Array[Byte] = {
Marshal.dump(foo)
}
def bytesToObject[T](fooBytes: Array[Byte])(implicit expected: ClassManifest[T]): Option[T] = {
Some(Marshal.load[T](fooBytes))
}
}
我看到SBinary但尚未发布. 解决方法
到目前为止,这是实现
original Marshal dump/load代码(如scala 2.9),不确定这是最好的方法,但似乎工作正常
object Serilaizer {
def objectToBytes[T](foo: T): Array[Byte] = { // replace Marshal.dump(foo)
val ba = new ByteArrayOutputStream()
val out = new ObjectOutputStream(ba)
out.writeObject(foo)
out.close()
ba.toByteArray
}
def bytesToObject[T](fooBytes: Array[Byte]): Option[T] = { // replace Marshal.load[T](foo)
if (userDataBytes != null) {
try {
val in = new ObjectInputStream(new ByteArrayInputStream(fooBytes))
val o = in.readObject.asInstanceOf[T]
in.close()
Some(o)
}
catch {
case e: Exception => {
throw new ClassCastException ("Serialization Problem",e)
None
}
}
}
else {
None
}
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
