如何使用Protocol Buffers创建动态消息?

时间:2013-01-06 17:21:25

标签: c++ protocol-buffers

假设我们要创建不使用任何预先存在的.proto文件的消息,并从cpp / cxx / h文件中编译出来。我们想严格使用protobuf作为库。例如,我们得到(在某些只有我们已知的格式)消息描述:名为MyMessage的消息必须包含MyIntFiels和可选MyStringFiels。如何创建这样的消息?例如,用简单的数据填充它保存到.bin并从该二进制文件中读取其内容?

我查看了dynamic_message.h help description和DescriptorPool等等,但是没有看到如何在消息中添加/删除字段,也没有办法在Fly消息中添加描述到DescriptorPool。

任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

简短回答:不能那样使用。

Protobuf的overview page说:

  

XML在某种程度上也是自我描述的。只有拥有消息定义(.proto文件)时,协议缓冲区才有意义。

意味着Protobuf的全部意义在于抛弃自我描述性,有利于解析速度==>创建自描述消息并不是它的目的。

考虑使用XML或JSON或任何其他序列化格式。如果需要保护,可以使用对称加密和/或lzip压缩。