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

Java 如何将proto3消息序列化为字符串并返回?,java,protocol-buffers,Java,Protocol Buffers,在Java中,我想将proto3消息转换为字符串: 我可以通过HTTP发送 随着越来越多的字段被添加到proto中,它仍然能够反序列化旧字符串 如果您想知道我为什么需要序列化为字符串,我有一个proto: message Order { ... } 我想从中创建一个字符串'order_tag',我想传递它 我看到了,但它说它是用于proto2的,而且它也没有说明任何向后兼容性。您可以将消息序列化为字节,并使用base64编码将序列化的值转换为字符串。这样,即使字段发生更改,只要模式更改发生

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

  • 我可以通过HTTP发送
  • 随着越来越多的字段被添加到proto中,它仍然能够反序列化旧字符串
  • 如果您想知道我为什么需要序列化为字符串,我有一个proto:

    message Order {
      ...
    }
    
    我想从中创建一个字符串'order_tag',我想传递它


    我看到了,但它说它是用于proto2的,而且它也没有说明任何向后兼容性。

    您可以将消息序列化为字节,并使用base64编码将序列化的值转换为字符串。这样,即使字段发生更改,只要模式更改发生在中定义的限制内,您也应该能够反序列化字符串

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

    要序列化为字符串,请执行以下操作:

    BaseEncoding.base64().encode(order.toByteArray())
    
    以及反序列化:

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

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