scala - 二进制序列化 - 在 Scala 2.10 上替换 Marshal

标签 scala scala-2.10

由于不推荐使用 scala.util.Marshal,我如何将这个旧代码迁移到 scala 2.10?

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
    }
  }
}

关于scala - 二进制序列化 - 在 Scala 2.10 上替换 Marshal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22484765/

相关文章:

java - 重启elasticsearch节点

scala - Scala 在 2.10 中通过模式匹配究竟改进了什么?

validation - 通过 for-comprehension 线程 `Try` s

Scala def歧义

algorithm - Scala - 计算强连接组件 - 堆栈溢出错误

scala - 为什么创建元组的显式语法只允许 AnyRefs 作为类型注释?

ScalaTest、Mockito、Guice 和 PartialMocking

mysql - Play framework 2.2.2 evolutions 未在 mysql 中触发

scala - scala 2.10.0 中高级类型的奇怪错误(适用于 scala 2.9.2)

scala - 如何使用 scala Reflect 获取给定类/特征的所有实例?给定实例的所有引用?