ワイヤ タイプを Start Group として渡すサーバーからのメッセージを解析しようとしています。開始グループと終了グループがサポートされていない (最新の) protobuf-c lib を使用しています。
前もって感謝します
ワイヤ タイプを Start Group として渡すサーバーからのメッセージを解析しようとしています。開始グループと終了グループがサポートされていない (最新の) 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 のプロトコルの 1 つだと思います。(そうでない場合は、データが破損している可能性があります。)
既にエンコーディング ドキュメントを読んでいると仮定しますが、グループについては説明していません。
グループは、「開始グループ」タグで始まり、サブメッセージの内容が続き、その後に対応する「終了グループ」タグが続くようにエンコードされます。これは、protobufs で値の末尾にタグが表示される唯一のケースです。他のすべてのケースでは、タグは先頭にのみ表示されます。
対照的に、通常のサブメッセージ (上記の 2 番目の例のように) は、「長さで区切られた」ワイヤ タイプを使用してエンコードされます: タグ、サブメッセージ サイズ、コンテンツが続きます。長さで区切られたエンコーディングは、すべてのフィールドを解析せずにサブメッセージをスキップできることを意味することに注意してください。グループの場合、グループの終了位置を知る唯一の方法は、end-group タグが表示されるまですべてのフィールドを解析することです。