我有以下原型:
message FrameData {
... arbitrarily complex ...
}
message DataDump {
optional uint64 headerField1 = 1;
optional uint64 headerField2 = 2;
optional uint64 headerField3 = 3;
repeated FrameData frameData = 4;
}我正在逐个迭代地创建frameData原型,我想将DataDump原型写入一个文件。
我可以通过简单地构建我的DataDump原型,然后调用SerializeToOstream --问题是数据只有几个100 it,这样我需要先在ram中构建所有的数据,然后才能将其转储到磁盘。
由于重复字段frameData是protobuf中的最后一个字段,所以我假设应该可以先将头写入文件,然后在每个frameData原型生成之后迭代地流出FrameData的元素。
这是如何做到的呢?
发布于 2020-09-07 06:56:05
Protobuf消息(特别是proto2语法消息)可以连接起来,以合并它们的内容。要弄清楚这是如何工作的,需要阅读原始编码格式文档。
在您的示例中,您可以首先将带有头字段的DataDump消息写入文件中。在此之后,在frameData中放置任意数量的项,并将该消息附加到文件的末尾。重复,直到所有的项目都写好了。
当解码器读取消息时,似乎所有项都是大frameData数组的一部分。
然而,在解码方面,这可能是一个问题:在许多实现中,这迫使您立即将整个文件读入内存,而不是以较小的块处理它们。
特别是如果您想要随机访问和某种类型的索引,存储数百of的数据集可以从更高级的存储格式中受益。
https://stackoverflow.com/questions/63769623
复制相似问题