java - 可以从给定的 protobuf 序列化中提取所有标签号吗?

标签 java python google-api protocol-buffers

给定 protobuf 序列化,是否可以获取消息中所有标签号的列表?通常是否可以在不定义 .proto 文件的情况下查看消息的结构?

最佳答案

大多数 API 确实具有某种形式的基于读取器的 API,允许您枚举原始 protobuf 流。然而,这本身并不足以完全理解数据,因为没有模式解释是不明确的:

  • varint 可以是 zig-zag 编码 (sint32/sint64),也可以不是 (int32/int64) >/uint32/uint64) - 彻底改变含义,或者 boolean 值,或者枚举
  • 固定 32/固定 64 可以是有符号或无符号整数,也可以是 IEEE754 浮点/ double
  • 带长度前缀的 block 可以是 UTF-8 字符串、BLOB、子消息或“打包”重复原语集;如果它是子消息,则必须递归重复

所以...是和不是。当然你可以得到最外层消息的字段号。

另一种方法是对无成员的类型使用常规 API(message Naked {}),然后查询通过许多实现提供的“扩展”API 获取意外数据(即所有数据)。

关于java - 可以从给定的 protobuf 序列化中提取所有标签号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9158329/

相关文章:

python - 重命名内置的 python 方法,如 replace()

c# - Google Contacts API asp.net 设置和授权 token

node.js - 谷歌目录 API : Unable to access User/Group endpoints using Service Account (403)

python - 如何使用数据框中的默认字符串更改无效的字符串模式?

charts - Google 图表/可视化 api Interpolate Null 仅适用于某些数据点?

java - Apache Camel 无法在 xxx 毫秒内获取锁。将跳过该文件

java - 使用java查找索引

java - 根据 ArrayList<HashMap<String, String>> 中的值更改 TextView 的颜色

java - 使用 GSON 反序列化数组

javascript - 从 JavaScript 函数运行 Python 脚本