1

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

我通过使用TextFormat::Parse. (文件内容来自TextFormat::Print)。然后我生成了相应的二进制文件,我尝试用它导入myMessageVariable.ParsefromCodedStream(文件未压缩)。但我注意到只有一小部分消息被导入。返回 true,因此我猜该myMessageVariable.IsInitialized库“认为”它已完全导入文件。

所以我的问题是:文件的导入方式有什么不同可能使导入“半失败”吗?(除了一个是二进制而另一个是文本的明显原因之外?)我们能做些什么来对抗它?

4

1 回答 1

1

读取文本数据和读取二进制数据有几点不同:

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

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

于 2017-11-25T06:35:50.957 回答