Google的Protobuf TextFormat序列化程序的输出在不同版本和平台之间是否稳定?

时间:2015-12-08 22:07:11

标签: serialization deserialization protocol-buffers

Google的协议缓冲区实现包含一个TextFormat类,可以将消息序列化为文本。

此文字格式有多稳定?具体做法是:

  • 如果我将proto2定义的消息序列化为UTF8,那么使用相同语言的任何其他版本的Google协议缓冲区实现是否能够根据相同的proto2消息定义对其进行反序列化?
  • 如果我们谈论谷歌发布的不同语言的实现,这仍然是真的吗?

1 个答案:

答案 0 :(得分:3)

是的,protobuf“文本格式”在所有实现中都是相同的。您可以在Java中调用toString(),然后在C ++中使用TextFormat解析它。

但请注意,文本格式适用于一端(发送者或接收者)是人的通信。对于计算机到计算机的通信,您应始终使用二进制格式。文本格式有一些重要的区别,在与人交谈时有意义,但在与计算机之间无关:

  • 当在文本输入中看到未知的字段名称时,这是一个错误。相反,对于二进制格式,为了向前兼容性,将忽略未知字段。但是,在文本格式中,假设一个未知名称可能是人类的错字,因此忽略是危险的。
  • 文本格式的解析和写入比二进制格式慢得多。它是根据反射接口而不是生成的代码实现的,并没有得到很好的优化。