Scala酸洗: how?

标签 scala serialization scala-pickling

我尝试在 Scala 中使用“pickling”序列化,并且我看到了演示它的相同示例:

import scala.pickling._
import json._

val pckl = List(1, 2, 3, 4).pickle

取消酸洗就像酸洗一样简单:

val lst = pckl.unpickle[List[Int]]

这个例子提出了一些问题。首先,它跳过对象到字符串的转换。显然你需要调用 pckl.value 来获取 json 字符串表示形式。

Unpickle 更令人困惑。反序列化是将字符串(或字节)转换为对象的行为。如果没有对象的字符串/二进制表示,这个“示例”为什么演示反序列化?

那么,如何使用 pickling 库反序列化简单对象?

最佳答案

使用类型系统和案例类来实现您的目标。您可以unpickle到层次结构中的某些高级类型(直到并包括AnyRef)。这是一个例子:

trait Zero
case class One(a:Int) extends Zero
case class Two(s:String) extends Zero

object Test extends App {
  import scala.pickling._
  import json._

  // String that can be sent down a wire
  val wire: String = Two("abc").pickle.value

  // On the other side, just use a case class
  wire.unpickle[Zero] match {
    case One(a) => println(a)
    case Two(s) => println(s)
    case unknown => println(unknown.getClass.getCanonicalName)
  }
}

关于Scala酸洗: how?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23072118/

相关文章:

scala - Groovy 的安全取消引用运算符 (?.) 的最佳 Scala 模仿?

ruby - 如何在 Ruby 中编码 lambda (Proc)?

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

scala - 加特林重复 Action

scala 风格 - 如何避免大量嵌套 map

scala-io,从 tmpfs 移动文件太慢

ruby - 是否有与 'new' 哈希语法等效的 Ruby Hash#to_s?

java - 通过ObjectInputStream接收对象

Scala 从字符串中解压

json - Scala Pickling 似乎不适用于 Point2D.Double