如何(base64)将protobuf编码为字符串

dim*_*414 8 java base64 protocol-buffers

我有一个 protobuf 并且想用 base64(或其他文本编码)对其二进制表示进行编码,以便通过文本协议进行传输。最干净的方法是什么?

dim*_*414 7

最简单的选择是将原型转换为 abyte[],然后使用GuavaBaseEncoding类将这些字节编码为 base64 字符串:

String asBase64 = BaseEncoding.base64().encode(proto.toByteArray());
Run Code Online (Sandbox Code Playgroud)

这是最直接的,但还有许多其他大致相同的机制。例如,如果您想将编码数据写入文件或其他可写资源,您可以将其写入返回OutputStreamBaseEncoding.encodingStream()

proto.writeTo(BaseEncoding.base64().encodingStream(fileWriter));
Run Code Online (Sandbox Code Playgroud)

从 Java 8 开始java.util.Base64,如果您不使用 Guava,还有 。参见encode(byte[])wrap(OutputStream)


正如 Jon Skeet 提到的,如果您没有明确需要以二进制格式传输数据(当然,您正在使用 proto3),则proto3 可以映射到 JSON 或从 JSON 映射。