代码之家  ›  专栏  ›  技术社区  ›  Emile D.

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

  •  1
  • Emile D.  · 技术社区  · 8 年前

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

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

    那么我的问题是:导入文件的方式是否有什么不同之处,可能导致导入“半失败”?(除了明显的原因,一个是二进制的,另一个是文本?)我们能做些什么来反对它呢?

    1 回复  |  直到 8 年前
        1
  •  1
  •   jpa    8 年前

    读取文本数据和读取二进制数据有一些区别:

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

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

    推荐文章