パックフィールドに関する質問があり、データをプロトコルバッファで保存/シリアル化しています。 私が本質的にやりたいことは、4MBのデータをファイルに保存することです。エンコーディング、データ型、およびパックされた繰り返しフィールド
私は(私たちの組み込みシステムで)持っているデータはuint8_t(1バイト)として受け取りました。私はできるだけ効率的にこのデータを保存したいと思います。
私はさまざまなprotobuf設定(4つ)をテストしています。
repeated uint32_t datastruct = 1;
repeated uint32_t datastruct = 1 [packed = true]
両方の変異体が(UINT32にUINT8を置く)1対1に割り当てられ、4つの値でbitshifted両方の変異体がのuint32_tに窮屈で。
私の驚いたことに、格納されたファイルは元の データよりもはるかに大きいです。 (私がuint32にuint8を入れた例は当然期待されていました..) 私が達成できる最良の結果は、4MBのデータでは5.2MBでしたが、 はそれほど良いものではありません。
私はここで重要なことを誤解しましたか? 私はprotobufがパケットに情報を追加することを認識しますが、25% の増加が大きすぎます。
また、GzipOutputStreamを使用すると、ファイルを小さくする代わりにサイズを大きくします。
ヒントをお聞かせください。
お時間をいただきありがとうございます。
ここでは 'uint32_t'とは何ですか?それは.protoの 'message'ですか? –
はい、そうです。 – almagest
それから...私は混乱しています...私はそのようなことをしても "詰まった"とは思っていませんでした...?それともグループですか? –