1

私が取り組んでいるユーティリティで、主に UTF-8 HTML コンテンツであるデータの圧縮を処理する必要があります。このユーティリティは、zLib と deflate アルゴリズムを使用してデータを圧縮します。入力データのサイズが 1 kB を超える場合、圧縮されたデータは常に圧縮されていない入力よりも小さくなると想定しても安全ですか? (1kB未満の入力データは圧縮されません。)

私はこの仮定が崩れる状況を見ようとしていますが、ほぼ完全なランダム入力を除けば、安全な仮定のように思えます。

編集:この仮定について疑問に思っている理由は、入力データと同じ大きさのバッファーが既に割り当てられているためです。私の仮定が当てはまる場合、この同じバッファーを再利用して、別のメモリ割り当てを回避できます。

4

2 に答える 2

1

私の知る限り、値が 0、1、2、...、127 の 128 バイトのシーケンスは、zLib では圧縮されません。技術的には、圧縮方式を破る HTML ページを意図的に作成することは可能ですが、通常の無害な HTML データを使用すれば、ほぼ完全に安全なはずです。

しかし、ほぼ完璧は完璧ではありません。そのサイズのバッファーが既にある場合は、このバッファーで圧縮を試みることをお勧めします。バッファーが十分でないことが判明した場合 (zLib にはそれを示す手段があると思います)、より大きなバッファーを割り当てるか、圧縮されていないバージョンを保存するだけです。そして、これらのケースが何らかのログに書き込まれていることを確認して、それが発生するかどうかを確認できるようにしてください:)

于 2013-06-07T21:07:59.973 に答える