Protobuf将序列化消息串联到一个文件中

时间:2013-11-27 10:49:53

标签: serialization deserialization protocol-buffers

我在google protobuf中有一系列文件序列化,但想知道是否有一种快捷方式将这些较小的文件连接成一个较大的protobuf,而不必担心阅读每个protobuf然后分组这些对象并输出。

有没有一种便宜的方式将文件连接在一起?即如何序列化每个文件?

2 个答案:

答案 0 :(得分:1)

您可以通过简单连接组合协议缓冲区消息。您希望结果形成一个数组,因此您需要将每个单独的文件序列化为数组本身:

message MyItem {
   ...
}

message MyCollection {
   repeated MyItem items = 1;
}

现在,如果您将每个文件序列化为MyCollection然后将它们连接起来(只是将原始二进制数据放在一起),那么生成的文件可以作为一个大型集合本身读取。

答案 1 :(得分:1)

除了jpa的回答之外,可能有必要说数据在序列化时不需要在完全相同的容器中,因为它在反序列化时是兼容的。

请考虑以下信息:

message FileData{
    required uint32 versionNumber = 1;
    repeated Data initialData = 2;
}

message MoreData{
    repeated Data data = 2;
}

可以将这些不同的消息序列化为一个数据容器,并将其反序列化为一条FileData条消息,只要FileData在零或更多MoreData之前序列化即可同时,FileDataMoreData具有相同的重复字段索引。