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