0

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

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

我看过 scala 酸洗,但我认为我需要内存中的所有数据。除了手动实现之外,还有什么更好/更简单的方法吗?使用 google protobuf 或任何相关库可以进行这种流处理吗?

4

1 回答 1

0

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

例如解析 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 中的编程示例。

于 2013-09-24T18:07:37.537 回答