如何将 proto3 消息序列化为字符串并返回?

dal*_*y42 3 java protocol-buffers

在 Java 中,我想将 proto3 消息转换为字符串:

  1. 我可以通过 HTTP 发送
  2. 随着更多字段添加到原型中,它仍然能够反序列化旧字符串吗?

如果您想知道为什么我需要序列化为字符串,我有一个原型:

message Order {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我想从中创建一个要传递的字符串“order_tag”。

我看到了com.google.protobuf.TextFormat但它说它是针对 proto2 的,而且它也没有说明任何有关向后兼容性的信息。

Raf*_*mal 5

您可以将消息序列化为字节,并使用 Base64 编码将序列化值转换为字符串。这样,即使字段发生变化,只要架构更改发生在https://developers.google.com/protocol-buffers/docs/proto3#updating中定义的限制范围内,您就应该能够反序列化字符串。

除调试目的外,请勿使用文本编码。它不提供与二进制格式相同的向后兼容性保证(例如,更改字段名称将破坏现有的序列化数据)。

序列化为字符串:

BaseEncoding.base64().encode(order.toByteArray())
Run Code Online (Sandbox Code Playgroud)

并反序列化:

Order.parseFrom(BaseEncoding.base64().decode(orderStr))
Run Code Online (Sandbox Code Playgroud)