2012-04-15 14 views
11

zlibのdeflate()compress()関数の違いは何ですか?zlib: `deflate`関数と` compress`関数の相違点

私はオンラインの例を見て、いくつかは圧縮を使用していましたが、圧縮を使用していました。

どの状況をどのように使い分けるべきですか?

答えて

44

compress()は、単一のコールでデータを圧縮するために使用され、常に2バイトのヘッダと4バイトのチェック値トレーラとの間でデータの収縮であるZLIB形式に圧縮されています。 compress()は単独で使用されます。

deflate()

は、一度データをチャンクを圧縮するために使用され、及び/又はそのような gzipのような他の形式に圧縮する -wrapped又は 、及びそのようなメモリレベルと圧縮戦略のような他のオプションを有します。

すべてのデータを一度に使用でき、結果を保持するのに十分なメモリがあり、デフォルトの圧縮形式、メモリ使用量、および戦略が必要な場合は、compress()を使用します。それ以外の場合は、deflate()を使用します。

deflate()は単独では使用されません。 deflateInit()またはdeflateInit2()を使用して、deflate()によって使用されるz_stream構造体を初期化する必要があります。その後、deflate()に1回以上電話してデータを圧縮し、結果を利用可能にします。最後に、deflateEnd()が呼び出され、構造体で使用されるメモリリソースが解放されます。詳細については、zlib.hおよびhttp://zlib.net/zlib_how.htmlのマニュアルを参照してください。

+21

マーク・アドラーは[間違いなくこの1つの権限](http://en.wikipedia.org/wiki/Mark_Adler)です。 – Xenon

+0

ありがとうございます。私はその一部を読んでいますが、最初はそれをよく理解していませんでした。あまりにも多くの情報でしたが、私は行って再読しました。 – mma1480

+3

偉大な...私はそれがなぜadler-32と呼ばれるのか知っている –

関連する問題