38

Google Protocol BuffersとASN.1(PERエンコーディングを使用)の最も顕著な違いは何ですか?私のプロジェクトにとって最も重要な問題は、シリアル化されたデータのサイズです。誰かが2つの間のデータサイズの比較をしましたか?

4

4 に答える 4

24

Unaligned PER で ASN.1 を使用し、適切な制約 (たとえば、整数の下限/上限、リストの長さの上限など) を使用してデータ型を定義すると、エンコーディングは非常にコンパクトになります。フィールド間のアラインメントやパディングなどのためにビットが無駄になることはなく、各フィールドは許容範囲の値を保持するために必要な最小ビット数でエンコードされます。たとえば、タイプ INTEGER (1..8) のフィールドは 3 ビット (1='000'、2='001'、...、8='111') でエンコードされます。4 つの選択肢を持つ CHOICE は、2 ビット (選択された選択肢を示す) に加えて、選択された選択肢が占めるビットを占有します。ASN.1 には他にも多くの興味深い機能があり、多くの公開された標準でうまく使用されています。例は拡張マーカー ("...") です。

于 2010-12-14T16:38:43.433 に答える
13

ASN.1 の作業を行ってから長い時間が経ちましたが、サイズは型の詳細と実際のデータに依存する可能性が非常に高くなります。

両方のプロトタイプを作成し、実際のデータをいくつか入れて比較することを強くお勧めします。

プロトコル バッファに繰り返しプリミティブ型が含まれる場合は、Subversion for Protocol Buffers の最新のソースを参照する必要があります。これらは、スペース効率の高い「パック」形式で表現できるようになりました。(私の C# への移植は、先週のある時点でこの機能に追いついたばかりです。)

于 2009-02-27T15:49:04.273 に答える