0

我想将对象(类的实例)保存到文件中。我没有找到任何有价值的例子。我需要使用序列化吗?

我怎么做?

更新:这是我尝试这样做的方法

import scala.util.Marshal
import scala.io.Source
import scala.collection.immutable
import java.io._

object Example {
  class Foo(val message: String) extends scala.Serializable
  val foo = new Foo("qweqwe")                    
  val out = new FileOutputStream("out123.txt")
  out.write(Marshal.dump(foo))
  out.close
}

首先,out123.txt 包含许多额外的数据,并且编码错误。我的直觉告诉我应该有另一种正确的方法。

4

4 回答 4

6

在上一个 ScalaDays Heather 介绍了一个新的库,它为序列化-酸洗提供了一种新的酷机制。我认为在 scala 中使用序列化和你想要的东西是一种惯用的方式。

在 ScalaDays'13上查看有关此主题的论文、幻灯片演讲

于 2013-07-09T05:17:48.663 回答
2

看看 Twitter Chill 来处理你的序列化:https ://github.com/twitter/chill 。它是 Kyro 序列化库的 Scala 助手。Github 页面上的文档/示例看起来足以满足您的需求。

于 2013-07-09T03:57:06.107 回答
2

也可以使用Jackson对 JSON 进行序列化和反序列化。一个很好的 Scala 友好的包装器是Jacks

JSON具有以下优点

(编辑)示例用法

序列化为 JSON:

val json = JacksMapper.writeValueAsString[MyClass](instance)

...和反序列化

val obj = JacksMapper.readValue[MyClass](json)
于 2013-07-09T05:31:39.037 回答
1

为了方便像我这样的人,只需在此处添加我的答案。

@4lex1vpickling提到的库仅支持 Scala 2.10/2.11,但我使用的是 Scala 2.12。所以我无法在我的项目中使用它。

然后我发现BooPickle。它支持 Scala 2.11 和 2.12!

这是示例:

import boopickle.Default._

val data = Seq("Hello", "World!")
val buf = Pickle.intoBytes(data)
val helloWorld = Unpickle[Seq[String]].fromBytes(buf)

更多详情请查看此处

于 2018-11-12T23:12:48.087 回答