parsing - 如何在 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 数据帧中的二进制消息。
解决方案
protobuf 编码不会更改字符串。因此,如果您的 protobuf 包含一个电子邮件地址作为字符串字段,您将在 protobuf 中看到该电子邮件地址。电话号码也是如此,因为它们通常存储为字符串,而不是整数。(整数字段不容易阅读。)
“二进制格式”并不意味着数据被加密或隐藏。这只是意味着编码可能包含一些不是有效字符代码的字节(如 0)。例如,Protobuf 在发送字符串之前将字符串的长度作为二进制整数发送。该长度不是人类可读的。您看到的是将ÈÇ
与电子邮件地址关联的二进制数据(不仅仅是长度)解释为文本的结果。
推荐阅读
- c# - Unity不会一键破坏对象
- android - 如何在容器内居中行?- 颤振
- time - 计算航海者一号往返通信时间的函数
- android - Android 交付需要 FcmNotification 属性?
- java - 带有路径变量的 URL 模式的 Spring 过滤器
- c - 为什么原始 udp 数据包不遵循路由规则
- r - 比较 R 中多个数据收集点的社会人口学特征
- elasticsearch - Elasticsearch 为不区分大小写的 Kibana 控件可视化配置小写分词器
- laravel - 从 Laravel 的数据库中检索数据的正确方法是什么?
- php - Laravel Throttle 中的:秒到:小时?