9

この質問に対する回答が得られないため、プロトタイプを作成して自分自身をチェックする必要があります。データセットのヘッダーは固定サイズにする必要があるため、固定サイズの文字列が必要です。それで、プロトコルバッファで固定サイズの文字列またはバイト配列を指定することは可能ですか? ここでははっきりとはわかりませんが、固定サイズの文字列をヘッダー メッセージに強制的に入れるのはちょっと気が引けます。--つまり、std::string('\0', 128);

そうでない場合は、#pragma pack(1) struct header {...};'

編集

ここで間接的に回答された質問。答えて除く

4

2 に答える 2

6

protobuf には、プロトコルにも .proto スキーマ言語にもそのような概念はありません。文字列と BLOB では、データは常に長さプレフィックスを使用して技術的に可変長です (それ自体が varint エンコーディングを使用するため、長さも可変長です)。

もちろん、特定の長さのデータのみを保存する場合は、整列します。また、protobuf の文字列は UTF-8 エンコードを使用した Unicode であるため、エンコードされたデータの長さは文字数ほど単純ではないことに注意してください(ASCII 文字のみを使用している場合を除く)。

于 2012-04-10T16:04:49.627 に答える
2

これは、前の回答に対するわずかな説明です。Protocol Buffers は文字列を UTF-8 としてエンコードせず、通常のバイトとしてエンコードします。オンワイヤ フォーマットは、消費されたバイト数の後に実際のバイトが続きます。https://developers.google.com/protocol-buffers/docs/encoding/を参照してください。

オンワイヤ形式は常に同じですが、プロトコル バッファは、開発者が使用する 2 つのインターフェイス (文字列とバイト) を提供します。主な違いは、前者は通常、開発者に文字列型を提供しようとするのに対し、後者は開発者に文字列型を提供しようとすることです。バイト型を提供します (つまり、Java は文字列には String を、バイトには ByteArray を提供します)。

于 2013-07-10T23:47:45.810 に答える