嘗試從服務器解析消息,該服務器將導線類型作爲起始組傳遞。 我正在使用protobuf-c lib,其中啓動組和終止組不受支持(最新)。是否有任何示例如何使用導線類型作爲啓動組,以便可以通過我自己解析消息谷歌協議緩衝區導線類型起始組和終止組使用
在此先感謝
嘗試從服務器解析消息,該服務器將導線類型作爲起始組傳遞。 我正在使用protobuf-c lib,其中啓動組和終止組不受支持(最新)。是否有任何示例如何使用導線類型作爲啓動組,以便可以通過我自己解析消息谷歌協議緩衝區導線類型起始組和終止組使用
在此先感謝
對於背景,「組」是表示子消息的不同方式。他們聲明如下:
message Foo {
repeated group bar = 1 {
optional int32 baz = 2;
optional string qux = 3;
}
}
語義上說,這是幾乎完全一樣:
message Foo {
repeated Bar bar = 1;
message Bar {
optional int32 baz = 2;
optional string qux = 3;
}
}
然而,編碼略有不同(如下所述)。
在Protobuf首次開源時,組已被棄用,因此很多非Google實現不支持組。 Google有一些仍然使用羣組的非常古老的協議,但Google之外可能沒有人應該使用羣組,所以我猜你正在使用的協議是Google的協議之一。 (如果沒有,也許你只是有損壞的數據。)
我假設你已經讀了the encoding docs,但他們不解釋組。
組以「起始組」標籤開始,隨後是子消息內容,後跟相應的「結束組」標籤。這是標籤出現在值結尾的protobufs中的唯一情況 - 在所有其他情況下,標籤只出現在開始處。相反,正常的子消息(如上面第二個例子中所示)使用「長度定界的」導線類型進行編碼:標籤,後跟子消息大小,後面是內容。請注意,長度分隔的編碼意味着您可以在不解析所有字段的情況下跳過子消息;通過一個羣組,知道羣組結束的唯一方法是解析每個字段,直到看到羣組標記。
感謝您的信息,這可以幫助我很多。 – user3232919