首页 > 解决方案 > 如何在 Java 中编写谷歌 protobuf 消息?

问题描述

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

*
bilalÈÇbilal@gmail.com"
12345678

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

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

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

标签: parsingprotoprotocol-buffersscalapb

解决方案


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

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


推荐阅读