加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

二进制序列化 – 替换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
    }
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读