Сообщение Protobuf - разница между двоичными и текстовыми файлами

Во время моей реализации в приложении с буферным протоколом я пытался работать с текстовыми файлами pbtxt, чтобы упростить свое программирование. Идея заключалась в том, чтобы переключиться на двоичный формат pb после того, как у меня появилось более четкое понимание API. (Я работаю в C++)

Я заставил свое приложение работать, импортировав файл с TextFormat::Parse, (Содержимое файла взято из TextFormat::Print). Затем я сгенерировал соответствующий двоичный файл, который я пытался импортировать с myMessageVariable.ParsefromCodedStream (файл не сжат). Но я замечаю, что импортируется только очень небольшая часть сообщения. myMessageVariable.IsInitialized возвращает true, поэтому я предполагаю, что библиотека "думает", что она полностью импортировала файл.

Итак, мой вопрос: существует ли что-то другое в способе импорта файла, который может сделать импорт "полусбойным"? (Помимо очевидной причины, по которой один является двоичным, а другой - в тексте?) И что мы можем сделать против этого?

1 ответ

Решение

Есть несколько различий в чтении текстовых данных и чтении двоичных данных:

  • Текстовые файлы иногда используют автоматическое преобразование перевода строки (\r\n против \n), особенно на платформах Windows. Это нужно отключить, открыв файл в двоичном режиме.
  • Двоичные файлы могут содержать нулевые байты в любой точке. Некоторые функции обработки текста прекращают чтение с первого нулевого байта.

Это может помочь, если вы сможете узнать больше о том, сколько сообщений анализируется. Затем вы можете посмотреть, какие байты находятся рядом с проблемной точкой, например, с помощью шестнадцатеричного редактора.

Другие вопросы по тегам