【问题标题】:How to serialize proto3 message to a string and back?如何将 proto3 消息序列化为字符串并返回?
【发布时间】:2020-04-16 04:36:31
【问题描述】:

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

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

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

message Order {
  ...
}

我想用它创建一个字符串“order_tag”,我想传递它。

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

【问题讨论】:

  • 通常,最好的选择是使用二进制序列化选项,如果您需要通过文本传输发送它; base-64 编码二进制
  • @MarcGravell 听起来不错,你能把它转换成答案吗?

标签: java protocol-buffers


【解决方案1】:

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

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

序列化为字符串:

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

反序列化:

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

【讨论】:

    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 2013-12-23
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多