我需要实现一个功能,将从外部设备接收的数据包记录到文件中。稍后应使用此文件重播此数据以模拟设备。不可能将所有数据保存在内存中,因此我需要逐个数据包处理数据包。
我正在寻找一种序列化机制,该机制支持将未知数量的数据包添加到文件中,然后逐个数据包再次重新加载它。理想情况下,输出是人类可读的,例如 json,但这不是必须的。
我已经看过 scala 酸洗,但我想我需要内存中的所有数据。除了手动实现之外,还有其他更好/更简单的方法吗?使用Google protobuf或任何相关库可以进行这种流处理吗?
为什么不使用组合器并将数据存储在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 中编程的示例。