Protobuf:如何重写文件

时间:2017-12-12 02:07:02

标签: serialization protocol-buffers

我正在使用Protobuf3作为文件格式。 PB API非常适合序列化和反序列化。但是我现在想要进行往返:写一个文件,读回来,修改一个字段并将文件重写回存储。

更详细地说:在创建PB对象时,首先实例化Builder对象,设置对象中的字段值,然后构建二进制对象。但是,在写入和读回二进制对象之后,如何修改字段?必须使用Builder对象来生成二进制文件,但是必须将所有现有字段复制回Builder吗?或者Builder是否自动从二进制形式填充自己?

理想情况下,我可以加载二进制文件,创建一个新的构建器,设置我想要的字段,并期望将原始数据和新数据合并在一起。

什么是最佳做法?

1 个答案:

答案 0 :(得分:1)

当您反序列化时,最终会得到一个设置了字段的对象。您可以按照自己喜欢的方式修改这些字段。然后,您可以序列化该对象并将新字节流写入文件。

您不需要复制反序列化对象来执行此操作(但是,如果您希望复制,GPB实现通常会有一个复制构造函数。)

你不能做的就是编辑文件;你必须完全重写文件。你没有明智的方法知道字节流的哪个部分发生了变化。它可能变得更长,更短,并且内容本身在任何情况下都会有所不同(因为您已经更改了对象中的字段)。