将多个对象序列化为scala中的单个(人类可读)文件

时间:2013-09-24 11:10:10

标签: scala serialization protocol-buffers scala-pickling

我需要实现一项功能,将从外部设备接收的数据包记录到文件中。稍后,此文件应用于重放此数据以模拟设备。不可能将所有数据都保存在内存中,因此我需要逐包处理数据。

我正在寻找一种序列化机制,支持将未知数量的数据包添加到文件中,然后再逐个数据包重新加载。理想地,输出是人类可读的,例如json但这不是必须的。

我看过scala酸洗,但我想我需要内存中的所有数据。除了手动执行此操作之外,还有更好/更简单的方法吗?使用谷歌protobuf或任何相关的库可以进行这种流处理吗?

1 个答案:

答案 0 :(得分:0)

为什么不使用组合器并将数据存储在JSON文件中?

E.g。解析JSON(似乎你有类似的结构):

import scala.util.parsing.combinator._
class JSON extends JavaTokenParsers {
  def value:   Parser[Any] = obj | arr | stringLiteral | 
                             floatingPointNumber | "null" | "true" | "false"
  def obj:     Parser[Any] = "{"~repsep(member, ",")~"}"
  def arr:     Parser[Any] = "["~repsep(value, ",")~"]"
  def member:  Parser[Any] = stringLiteral~":"~value
}

然后通过从这些文件加载​​JSON来重放:

import java.io.FileReader
object ParseJSON extends JSON {
  def main(args: Array[String]) {
    val reader = new FileReader(args(0))
    // parseAll is overloaded: takes sequence or input reader as a second argument
    println(parseAll(value, reader))
  }
}

Scala SE编程示例。