を持っている:protobufで一定のサイズのメッセージを記述できますか?例えば、私は次のメッセージを
Message Header {
fixed32 messageType;
fixed32 messageSize;
}
私は、任意のプラットフォーム上で、任意の言語で、ヘッダーは一定の大きさのバイト配列にseralizedされることを確認することができますか?
を持っている:protobufで一定のサイズのメッセージを記述できますか?例えば、私は次のメッセージを
Message Header {
fixed32 messageType;
fixed32 messageSize;
}
私は、任意のプラットフォーム上で、任意の言語で、ヘッダーは一定の大きさのバイト配列にseralizedされることを確認することができますか?
はい...っぽい、は予測可能なサイズ固定でなければならないこと。ペイロードは固定サイズであり、ヘッダは可変長符号化されている。それは理論ではちょうど継続ビットセットでゼロパディングの9つの余分なバイトまで含めることができます - ここわずか落とし穴がvarint仕様は、実際に次善のエンコーディングを禁止していないということであります。しかし、実際では、これは問題ではありません。
そこでこれらはvarintとして解釈同じデータである(値:1):
期待:
00000001
準最適:
10000001 10000000 10000000 10000000 00000000
非常次善:
10000001 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 00000000
(MSBの各バイトは継続フラグです。他の7ビットは、最初最下位グループと、ペイロードです。唯一の64ビットが期待されているので、ここでvarintの最大サイズは10バイトである必要がありますが、任意のライブラリが明示的にこれをチェックしない場合、私は疑問に思う)実際に
:!ライブラリは、最初の形式を使用します。