我想将对象(类的实例)保存到文件中。我没有找到任何有价值的例子。我需要使用序列化吗?
我该怎么做?
更新: 以下是我尝试这样做的方法
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包含许多额外数据,而且编码错误。我的直觉告诉我应该有另一种正确的方式。
答案 0 :(得分:6)
在最后一个ScalaDays上,Heather引入了一个新的库,为序列化提供了一种新的酷机制 - pickling。我认为在scala中使用序列化以及你想要的是一种惯用的方式。
答案 1 :(得分:2)
也可以使用Jackson从JSON序列化和反序列化。 一个很好的包装,使Scala友好是Jacks
JSON具有以下优点
(编辑)使用示例
序列化为JSON:
val json = JacksMapper.writeValueAsString[MyClass](instance)
...和反序列化
val obj = JacksMapper.readValue[MyClass](json)
答案 2 :(得分:1)
看看Twitter Chill来处理你的序列化:https://github.com/twitter/chill。它是Kyro序列化库的Scala助手。 Github页面上的文档/示例看起来足以满足您的需求。
答案 3 :(得分:0)
只需在此处添加我的答案即可,以方便像我这样的人。
pickling
提到的@4lex1v库仅支持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)
更多详细信息,请检查here。