【问题标题】:Scala Pickling usage MyObject -> Array[Byte] -> MyObjectScala 酸洗使用 MyObject -> Array[Byte] -> MyObject
【发布时间】:2013-09-03 21:58:22
【问题描述】:

我试图进入 ScalaDays 2013 上展示的新 Scala Pickling 库:Scala Pickling

我真正缺少的是一些如何使用该库的简单示例。

我知道我可以像这样腌制一些对象并再次取消腌制它:

import scala.pickling._

val pckl = List(1, 2, 3, 4).pickle
val lst = pckl.unpickle[List[Int]]

在本例中,pckl 属于 Pickle 类型。这种类型到底有什么用,我怎样才能得到它的一个 Array[Byte]?

【问题讨论】:

    标签: scala scala-pickling


    【解决方案1】:

    如果你想腌制成字节,那么代码将如下所示:

    import scala.pickling._
    import binary._         
    val pckl = List(1, 2, 3, 4).pickle
    val bytes = pckl.value
    

    如果你想要 json,代码看起来几乎完全一样,只是对导入进行了微小的更改:

    import scala.pickling._
    import json._         
    val pckl = List(1, 2, 3, 4).pickle
    val json = pckl.value
    

    对象的腌制方式取决于您在scala.pickling 下选择的导入类型(binaryjson)。导入binary 并且value 属性是Array[Byte]。导入json,它是一个json String

    【讨论】:

    • 是的,cmbaxter 完全正确。腌制表示的类型是Pickle 的子类型。从腌制表示中选择 value 会得到您期望的类型,Array[Byte] 用于二进制,String 用于 JSON,等等。
    • 感谢您的回答。有时,当 Scala 隐式执行某些操作时,我会感到困惑。我仍然习惯于像 Java 这样更明确的语法,但我正在努力。 ;)
    • 会不会是IntelliJ看不懂,用什么类型?我导入了 scala.pickling._ 和 binary._,当我在一个对象上调用 .pickle 时,IntelliJ 告诉我它是 Pickle 类型,而不是 BinaryPickle。因此它告诉我 .value 是 Pickle.this.type#ValueType 类型。编译器不会抱怨,因为它的结果类型是 BinaryPickle。我的解决方法:现在调用 .pickle.asInstanceOf[BinaryPickle] 以便它不会在 IDE 中显示错误。
    • 非常好,感谢您提出。几天前,我们引入了一个修复程序,我们认为该修复程序应该使用 IntelliJ 解决此问题。简而言之,pickling 框架中使用的宏现在具有更精确的类型签名,IntelliJ 应该可以拾取这些签名,而无需 IntelliJ 扩展宏。如果您对此仍有问题,请告诉我们!
    • 我希望主页上的文档以更易于阅读的形式提供,而不是用于大学世界的繁琐 PDF。 Pickling 可能是一个不错的库,但我发现它在这一点上非常缺乏。
    猜你喜欢
    • 2014-10-08
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2019-11-05
    • 2012-09-10
    • 2017-10-17
    相关资源
    最近更新 更多