我需要实现一项功能,将从外部设备接收的数据包记录到文件中。稍后,此文件应用于重放此数据以模拟设备。不可能将所有数据都保存在内存中,因此我需要逐包处理数据。
我正在寻找一种序列化机制,支持将未知数量的数据包添加到文件中,然后再逐个数据包重新加载。理想地,输出是人类可读的,例如json但这不是必须的。
我看过scala酸洗,但我想我需要内存中的所有数据。除了手动执行此操作之外,还有更好/更简单的方法吗?使用谷歌protobuf或任何相关的库可以进行这种流处理吗?
答案 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编程示例。