Protobuf消息 - 解析二进制文件和文本文件之间的差异

时间:2017-11-24 16:58:53

标签: protocol-buffers protocol-buffers-3

在协议缓冲区应用程序的实现过程中,我尝试使用文本pbtxt文件来简化编程。一旦我对API有了更清楚的了解,我的想法就是切换到pb二进制格式。 (我在C ++工作)

我通过使用TextFormat::Parse导入文件使我的应用程序正常工作。 (该文件的内容来自TextFormat::Print)。然后我生成了相应的二进制文件,我试图用myMessageVariable.ParsefromCodedStream导入(文件未压缩)。但我注意到只导入了一小部分消息。 myMessageVariable.IsInitialized返回true,因此我猜图书馆"认为"它已经完全导入了文件。

所以我的问题是:导入文件的方式有什么不同可以导致导入"半失败"? (除了明显的原因,一个是二进制,另一个是文本?)我们可以做些什么呢?

1 个答案:

答案 0 :(得分:1)

在阅读文本数据和阅读二进制数据方面存在一些差异:

  • 文本文件有时会使用自动换行转换(\r\n\n),尤其是在Windows平台上。必须通过以二进制模式打开文件来禁用它。
  • 二进制文件可以在任何位置包含空字节。某些文本处理函数在第一个空字节处停止读取。

如果您可以确定更多有关解析消息的数量,这可能会有所帮助。然后,您可以查看问题点附近的字节类型,例如,十六进制编辑