协议缓冲区 - 将具有相同 .proto 文件的二进制数据文件合并到一个文件中

Posted

技术标签:

【中文标题】协议缓冲区 - 将具有相同 .proto 文件的二进制数据文件合并到一个文件中【英文标题】:Protocol Buffer - merge binary data files with the same .proto file to the one file 【发布时间】:2015-02-13 10:15:26 【问题描述】:

我有很多根据协议缓冲区的 .proto 方案创建的二进制结构的数据文件(几乎 150 个)。有没有有效的解决方案如何将所有文件合并为一个大的二进制数据文件而不丢失任何信息?

【问题讨论】:

你有方案吗? 是的,我有计划。 【参考方案1】:

如果您的方案允许,您可以合并现有数据。

方案

message People 
  repeated Person person = 1;

message Person 
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;

现有数据

两个现有的二进制文件,每个都包含一个Person

person1.bin person2.bin

Python 代码

import p_pb2

people = p_pb2.People()
people.person.add().ParseFromString(open("person1.bin", "rb").read())
people.person.add().ParseFromString(open("person2.bin", "rb").read())
with open("people.bin", "wb") as o:
    o.write(people.SerializeToString())

组合数据

现在文件people.bin 包含一个People 实例,包括两个Person 实例。

【讨论】:

非常感谢!我一定会尽快尝试的!不过还是有道理的。 不幸的是,我发现原始模式没有任何包装类(文件非常大,不可能将每一行都存储在一个包装类中),所以它被加密为 BASE64 和由新行分隔。由于这种格式,很容易合并我想要合并的文件。只需附加这些文件。无论如何感谢您的建议!

以上是关于协议缓冲区 - 将具有相同 .proto 文件的二进制数据文件合并到一个文件中的主要内容,如果未能解决你的问题,请参考以下文章

使用 qmake 链接 .proto 文件

是否有充分的理由在单平台系统上使用 .proto 文件?

如何在项目和团队之间共享和版本化协议缓冲区(proto)接口?

如何通过套接字发送.proto(协议缓冲区)中定义的类

协议缓冲区:枚举问题

在协议缓冲区中定义字典