假设我们要创建不使用任何预先存在的.proto文件的消息,并从cpp / cxx / h文件中编译出来。我们想严格使用protobuf作为库。例如,我们得到(在某些只有我们已知的格式)消息描述:名为MyMessage
的消息必须包含MyIntFiels
和可选MyStringFiels
。如何创建这样的消息?例如,用简单的数据填充它保存到.bin
并从该二进制文件中读取其内容?
我查看了dynamic_message.h help description和DescriptorPool等等,但是没有看到如何在消息中添加/删除字段,也没有办法在Fly消息中添加描述到DescriptorPool。
任何人都可以解释一下吗?
答案 0 :(得分:2)
简短回答:不能那样使用。
Protobuf的overview page说:
XML在某种程度上也是自我描述的。只有拥有消息定义(.proto文件)时,协议缓冲区才有意义。
意味着Protobuf的全部意义在于抛弃自我描述性,有利于解析速度==>创建自描述消息并不是它的目的。
考虑使用XML或JSON或任何其他序列化格式。如果需要保护,可以使用对称加密和/或lzip压缩。