Как сериализовать сообщение proto3 в строку и обратно? - PullRequest
1 голос
/ 16 апреля 2020

В Java я хочу преобразовать сообщение proto3 в строку, которую:

  1. я могу отправить по HTTP
  2. По мере добавления в прототип дополнительных полей, это все еще в состоянии десериализовать старые строки?

Если вам интересно, почему мне нужно сериализовать в строку, у меня есть прото:

message Order {
  ...
}

, и я хочу создать строку 'order_tag' из этого, который я хочу передать.

Я видел com.google.protobuf.TextFormat , но он говорит, что это для proto2, а также ничего не говорит о обратном совместимость.

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете сериализовать сообщение в байты и использовать кодировку base64 для преобразования сериализованного значения в строку. Таким образом, даже если поля изменятся, вы сможете десериализовать строку, если изменение схемы происходит в пределах ограничений, определенных в https://developers.google.com/protocol-buffers/docs/proto3#updating.

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

Для сериализации в строку:

BaseEncoding.base64().encode(order.toByteArray())

и десериализации:

Order.parseFrom(BaseEncoding.base64().decode(orderStr))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...