二进制序列化 – 替换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 } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |