Конвертируйте сообщение protobuf в строку в Java для сохранения

Я работаю над проектом, который хранит все данные в парах ключ / значение. И ключ, и значение являются строками. Изменение этого выходит за рамки текущей области. Каждая концепция данных представлена ​​сообщением protobuf.

Итак, я должен хранить сообщение protobuf в виде строки. Достаточно ли сохранить сообщение как message.toByteString(). ToString()? Или я должен кодировать byte[], например, с помощью кодировки Base32?

редактировать

Использование ByteString для постоянства не работает:

Message m = ...;
ByteString s = m.toByteString();
ByteString s_ = ByteString.copyFromUtf8(s.toStringUtf8());
Message.PARSER.parseFrom(s_);

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

Итак, вы предлагаете использовать кодировку Base32 для m.toByteArray()? Обратите внимание, что изменение типа данных со строки на byte [] в настоящее время выходит за рамки.

Спасибо!

1 ответ

Решение

Если вам необходимо сохранить закодированное сообщение в виде текста, вам следует использовать кодировку base64. Base32 тоже работает, но base64 немного компактнее и лучше стандартизирован.

С помощью toStringUtf8() не работает, потому что закодированное сообщение не является UTF-8. Следовательно, этот подход испортит ваши данные.

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