scala - 类型未知时取消酸洗

标签 scala scala-pickling

我正在尝试使用 Scala Pickling 来编写一些通用的 unpickling 逻辑。

假设您有两种类型,A 和 B,您将它们腌制到一个字节数组中。

您获取此字节数组并将其发送到另一台机器,并以字节数组的形式接收它。

现在你需要unpickle它,但是你不知道字节数组是A类型还是B类型。

您将如何编写拆箱部分的程序?您是否让 A 和 B 扩展另一种类型,比如 T,然后调用 unpickle[T],然后对 A 或 B 的结果进行模式匹配?

或者您是否向 T 添加一个实例变量,比如一个 Byte,它对类型 A 或 B 的实例使用不同的数字,并基于此调用 unpickle[A] 或 unpickle[B]?

更新:查看 Scala Pickling 测试套件,我发现最接近的是 base.scala ,这有点遵循第一个选项。

最佳答案

打印的作品如下:

It's A
It's B

代码:

import scala.pickling._
import binary._

object MultiTypePickling extends App {

  sealed abstract class Base
  final class A extends Base { override def toString = "A" }
  final class B extends Base { override def toString = "B" }

  val a = new A
  val pa = a.pickle
  val b = new B
  val pb = b.pickle

  // ----
  pa.value.unpickle[Base] match {
    case aa: A =>
      println("It's " + aa)
    case _ =>
      assert(assertion = false)
  }

  pb.value.unpickle[Base] match {
    case bb: B =>
      println("It's " + bb)
    case _ =>
      assert(assertion = false)
  }

}

关于scala - 类型未知时取消酸洗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22944395/

相关文章:

json - 将对象的 json 数组解析为其适当的案例类

scala - 在 APACHE SPARK 中通过 KryoSerializer 和 JavaSerializer 使用 Scala Pickling 序列化

json - 用于 Json 序列化和反序列化的 Scala Pickling?

scala - 使用 Pickling 序列化到磁盘并反序列化 Scala 对象

scala - 将对象参数传递给父级时无法在类层次结构中生成 unpickler

Scala 酸洗用法 MyObject -> Array[Byte] -> MyObject

scala - 如何使用 Scala 重定向到 Play Framework 中的相同 Controller 方法?

arrays - Scala:将两个数组合并为一个结构

斯卡拉 : bug with getLines?

scala - 在 Scala 中使用泛型实现 trait 的正确方法是什么?