我正在使用https://protogen.marcgravell.com/decode分析一些protobuf数据,但我无法理解这一点:
我正在阅读protobuf编码指南,可以看到数据不必是字符串,而是长度分隔的string, bytes, embedded messages, packed repeated fields
我不明白的是为什么它在字段105中有一个非常好的字符串apples1
,但是对于同一个字段105却有3倍随机空有效载荷?这与第三方对我所使用的protbuf的使用有些奇怪,还是我想念的其他东西?
谢谢。
答案 0 :(得分:3)
关于空字符串,没有什么特别不寻常的;但是,它们也很可能是子消息-只是没有任何有趣属性的对象。 nil (未分配/ null等)子消息根本不会出现,但是 non-nil 子消息却没有任何有趣的内容将是:一个零字节的二进制字符串(以protobuf术语)。
同样,一个bytes
字段被明确分配了一个零长度的缓冲区:它将是一个零字节的二进制字符串。并且:具有零个元素的“打包”数组:将是一个零字节的二进制字符串。
所以:这里没有什么不寻常的地方-在各种情况下,这都是完全正常且可以预期的protobuf。
由于字段号不变,所以听起来像这样:
repeated string whatever = 105;
即
obj.Whatever = [ "apples1", "", "", "" ];
奇怪,但不是无效的。