首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++以增量方式写入原始文件

c++以增量方式写入原始文件
EN

Stack Overflow用户
提问于 2020-09-06 23:03:34
回答 1查看 384关注 0票数 2

我有以下原型:

代码语言:javascript
复制
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的元素。

这是如何做到的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-07 06:56:05

Protobuf消息(特别是proto2语法消息)可以连接起来,以合并它们的内容。要弄清楚这是如何工作的,需要阅读原始编码格式文档

在您的示例中,您可以首先将带有头字段的DataDump消息写入文件中。在此之后,在frameData中放置任意数量的项,并将该消息附加到文件的末尾。重复,直到所有的项目都写好了。

当解码器读取消息时,似乎所有项都是大frameData数组的一部分。

然而,在解码方面,这可能是一个问题:在许多实现中,这迫使您立即将整个文件读入内存,而不是以较小的块处理它们。

特别是如果您想要随机访问和某种类型的索引,存储数百of的数据集可以从更高级的存储格式中受益。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63769623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档