10

GZIP や DEFLATE (またはその他の圧縮メカニズム)によってファイル サイズが大きくなる場合があることはよく知られています。ファイルを増やすことができる最大値 (パーセンテージまたは定数) はありますか? それは何ですか?

ファイルが X バイトで、それを gzip するつもりで、事前にファイル スペースの予算を立てる必要がある場合 - 最悪のシナリオは何ですか?

更新: 2 つのオーバーヘッドがあります。GZIP はヘッダーを追加します。通常は 18 バイトですが、基本的に任意の長さです。デフレートはどうですか?それは、私が知らない倍数の要素でコンテンツを拡張できます。誰がそれが何であるか知っていますか?

4

2 に答える 2

10

gzip は、少なくとも18 バイトのヘッダーとトレーラーを追加します。ヘッダーには、パス名を含めることもできます。これにより、その数のバイトと末尾のゼロが追加されます。

gzip の deflate 実装には、ブロックごとに 16383 バイトを格納するオプションがあり、5 バイトのオーバーヘッドがあります。代替がより多くのバイトを必要とする場合は、常にそうすることが選択されます。n入力バイトの最大圧縮バイト数は次のとおりです。

n+5(床(n/16383)+1)

于 2014-05-10T07:18:59.830 に答える
0

圧縮ファイルには、解凍方法を示すヘッダーが常に含まれています。

そのヘッダーのサイズは、圧縮できないファイルを圧縮するときの最悪の場合のオーバーヘッドを表します (データに順序/パターンがないため、ランダムです)。

ヘッダーは特定のアルゴリズムに基づいて異なり、アーカイブ内のファイルのリストなど、可変長の情報が含まれる場合があります。

GZip には少なくとも 18 バイトのオーバーヘッド (ヘッダー + フッターの CRC-32) があり、オプションでアーカイブ内のファイルのリストを含めることができます。

http://en.wikipedia.org/wiki/Gzip#File_format

特殊な状況では、カスタム圧縮アルゴリズムによってヘッダーのオーバーヘッドを削減または排除できることに注意してください。たとえば、ヘッダーが不要になるように、圧縮および解凍ソフトウェアで知られているカスタム圧縮辞書を使用して短いテキストを圧縮しました。これはかなりまれな使用例であり、おそらくほとんどの状況では役に立ちません (ストレージと帯域幅が比較的安価であることを考えると)。

于 2014-05-09T18:16:04.797 に答える