鉴于protobuf序列化,是否可以获取消息中所有标记号的列表?通常可以在没有定义.proto文件的情况下查看消息的结构吗?
答案 0 :(得分:2)
大多数API确实会有某种形式的基于读者的API,允许您枚举原始的protobuf流。但是,这本身并不足以完全理解数据,因为没有模式解释是不明确的:
sint32
/ sint64
),不是(int32
/ int64
/ uint32
/ {{1} }) - 从根本上改变含义,或布尔值或枚举所以......是的,没有。当然,您可以获取最外层消息的字段编号。
另一种方法是对无成员(uint64
)的类型使用常规 API,然后查询意外数据(即所有它)通过许多实现提供的“扩展”API。
答案 1 :(得分:2)
您可以获取显示在一个特定消息中的所有标记号,但您不会获得任何嵌套消息 - 并且您将不会知道这些字段的类型,只是某些子集的可能的类型。
如果查看wire encoding,可以看到(例如)字节数组,字符串和嵌套消息都以相同的方式编码 - 因此您可能知道“字段3是长度为前缀的二进制文件字段“但你不会知道这是否是嵌套消息,字符串或字节数组。