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

Is the output of Google's Protobuf TextFormat serializer stable between different versions and platforms?

Google 的 Protocol Buffers 实现包含一个 TextFormat class,它能够序列化消息 to/from 文本。

这种文本格式的稳定性如何?具体来说:

是的,protobuf "text format" 在所有实现中都是相同的。可以在Java中调用toString(),然后在C++等中使用TextFormat解析

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

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