Google协议缓冲区,在提供的流对象中向后重新定位IO头

Google Protocol Buffers, backward reposition IO head in the stream objects provided

本文关键字:新定位 定位 IO 缓冲区 协议 对象 Google      更新时间:2023-10-16

我想把IO头移到某个CodedOutputStream或ZeroCopyOutputStream的开头,这样我就可以用文件中有多少protobuf消息以及下面的消息消耗了多少字节来更新头数据结构。

备份功能不适用于此,有什么建议吗?我正在为事件数据创建一种文件格式,其中每个文件包含多个事件数据集。我需要两种类型的头实体(固定大小)一种是全局的,另一种是每个数据集的。我在写入数据集事件后更新了这些。那么,如何在不损坏流对象的内部状态的情况下移动写标头?。

编辑

我想知道,如果我刷新流包装器,只使用c函数重新封装头部,这对流类有效吗?还是我最终会陷入未定义的境地?

我想最明显的方法是有两个文件,而不是每个文件:一个是包含流式数据的主文件,然后是包含标头信息的索引文件。