在 Java 中,我想将一个 proto3 消息转换成一个字符串:
- 我可以通过 HTTP 发送
- 随着更多字段被添加到原型(prototype)中,它仍然能够反序列化旧字符串吗?
如果你想知道为什么我需要序列化成一个字符串,我有一个原型(prototype):
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))
关于java - 如何将 proto3 消息序列化为字符串并返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61242789/