如何将Protobuf编码为字符串并进行(base64)编码

11

我有一个protobuf对象,并希望将其二进制表示编码成base64(或其他文本编码),以传输到文本协议。最干净的方法是什么?

1个回答

7
最简单的方法是将您的proto转换为byte[],然后使用Guava的BaseEncoding类将这些字节编码为base64字符串:(转换为byte[](Guava)BaseEncoding类)
String asBase64 = BaseEncoding.base64().encode(proto.toByteArray());

这是最简单的方法,但还有其他大致等效的机制。例如,如果您想将编码数据写入文件或其他可写资源,您可以将其写入由BaseEncoding.encodingStream()返回的OutputStream
proto.writeTo(BaseEncoding.base64().encodingStream(fileWriter));

从Java 8开始,如果您没有使用Guava,还可以使用java.util.Base64。请参见encode(byte[])wrap(OutputStream)。保留HTML标签。
正如Jon Skeet所提到的,如果您不需要明确以二进制格式传输数据(并且您正在使用proto3),则proto3可以映射到和从JSON映射

1
请注意,从proto3开始,将支持JSON格式 - 显然比使用base64更易读。 - Jon Skeet
谢谢,已添加链接。 - dimo414
1
使用Java SE标准的Base64:String asBase64 = Base64.getEncoder().encodeToStrng(proto.toByteArray());。同时查看.wrap(OutputStream) - Joop Eggen
@JoopEggen 谢谢;我认为在回答时我的代码库还没有使用Java 8。我已经更新了答案,指向了Base64 - dimo414

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接