如何在 java 中写入 google protobuf 消息?

How to write google protobuf messages in java?

我正在使用 google protobuf 库在文件中写入消息。然而,这些消息对我来说并不是二进制消息。我使用的原型很简单,它有姓名、电子邮件和手机号码。我得到的文件是:

*
bilalÈÇbilal@gmail.com"
12345678

如果我回读我能够读取它,但这看起来不是二进制数据,我想要的是将二进制写入文件然后在读取时解析它。我浏览了 API,发现我们有多种方法可用于 parseFrom(),例如:

1) parseFrom(InputStream)
2) parseFrom(CodedInputStream)
3) parseFrom(Byte[])

在 google protobuf 教程中,他们使用 parseFrom(InputStream)。对于二进制消息,我认为我需要 parseFrom(Byte[])。但我不知道如何编写二进制消息。感谢帮助。我的最终目标是使用 scalapb 读取 spark 数据帧中的二进制消息。

字符串不会被 protobuf 编码改变。因此,如果您的 protobuf 包含电子邮件地址作为字符串字段,您将在 protobuf 中看到该电子邮件地址。电话号码也是如此,因为它们通常存储为字符串,而不是整数。 (整数字段不容易读取。)

"Binary format" 并不意味着数据已加密或隐藏。这只是意味着编码可能包含一些不是有效字符代码的字节(如 0)。例如,Protobuf 在发送字符串之前将字符串的长度作为二进制整数发送。该长度不是人类可读的。您看到的 ÈÇ 是将与电子邮件地址关联的二进制数据(不仅仅是长度)解释为文本的结果。

你说的是写消息,这意味着你必须使用命令{protoObj}.writeDelimitedTo({an outputstream})(请注意分隔性质)并用{yourprotodefclass}.parseDelimitedFrom({an inputstream})