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

C++ Google协议缓冲区,在提供的流对象中向后重新定位IO头,c++,serialization,protocol-buffers,file-format,C++,Serialization,Protocol Buffers,File Format,我想将IO头移动到某个CodedOutputStream或ZeroCopyOutputStream的开头,这样我就可以用文件中的protobuf消息数量以及以下消息消耗的字节数来更新头数据结构 这本书不是为了这个,有什么建议吗?我正在为事件数据创建一个文件格式,其中每个文件包含多个事件数据集。我需要两种类型的头实体(固定大小),一种是全局的,一种是每个数据集的。我在写入数据集事件后更新这些事件。那么,如何在不破坏流对象的内部状态的情况下移动写入头呢 编辑 我想知道,如果我刷新流包装器,然后只使用

我想将IO头移动到某个CodedOutputStream或ZeroCopyOutputStream的开头,这样我就可以用文件中的protobuf消息数量以及以下消息消耗的字节数来更新头数据结构

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

编辑


我想知道,如果我刷新流包装器,然后只使用c函数来重置头部,这对流类有效吗,或者我最终会进入未定义的区域

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

Hmm也许,我没有正确的理由取消了这种方法。我想我可以利用文件系统。是的,这是一个非常明智的建议,谢谢。我将使用boost::iostream,我可以从它和protobuf获取文件描述符。这样我就可以使用可变长度的标题。