给定 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/