Сообщение Protobuf - разница между двоичными и текстовыми файлами
Во время моей реализации в приложении с буферным протоколом я пытался работать с текстовыми файлами pbtxt, чтобы упростить свое программирование. Идея заключалась в том, чтобы переключиться на двоичный формат pb после того, как у меня появилось более четкое понимание API. (Я работаю в C++)
Я заставил свое приложение работать, импортировав файл с TextFormat::Parse
, (Содержимое файла взято из TextFormat::Print
). Затем я сгенерировал соответствующий двоичный файл, который я пытался импортировать с myMessageVariable.ParsefromCodedStream
(файл не сжат). Но я замечаю, что импортируется только очень небольшая часть сообщения. myMessageVariable.IsInitialized
возвращает true, поэтому я предполагаю, что библиотека "думает", что она полностью импортировала файл.
Итак, мой вопрос: существует ли что-то другое в способе импорта файла, который может сделать импорт "полусбойным"? (Помимо очевидной причины, по которой один является двоичным, а другой - в тексте?) И что мы можем сделать против этого?
1 ответ
Есть несколько различий в чтении текстовых данных и чтении двоичных данных:
- Текстовые файлы иногда используют автоматическое преобразование перевода строки (
\r\n
против\n
), особенно на платформах Windows. Это нужно отключить, открыв файл в двоичном режиме. - Двоичные файлы могут содержать нулевые байты в любой точке. Некоторые функции обработки текста прекращают чтение с первого нулевого байта.
Это может помочь, если вы сможете узнать больше о том, сколько сообщений анализируется. Затем вы можете посмотреть, какие байты находятся рядом с проблемной точкой, например, с помощью шестнадцатеричного редактора.