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

How to serialize proto3 message to a string and back?

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

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

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

message Order {
  ...
}

我想用它创建一个字符串 'order_tag' 我想传递它。

我看到了 com.google.protobuf.TextFormat,但它说它适用于 proto2,而且它也没有说明任何关于向后兼容性的内容。

您可以将消息序列化为字节,并使用base64编码将序列化值转换为字符串。这样,即使字段发生变化,只要架构更改发生在 https://developers.google.com/protocol-buffers/docs/proto3#updating.

中定义的限制范围内,您就应该能够反序列化字符串

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

要序列化为字符串:

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

并反序列化:

Order.parseFrom(BaseEncoding.base64().decode(orderStr))