6

たとえば、サイズが7バイトの.txtファイルを圧縮するとします。圧縮して.zipファイルに変換すると、サイズは190バイトになります。

「オーバーヘッド」のおおよそのサイズを推定または計算する方法はありますか?

オーバーヘッドのサイズに影響を与える要因は何ですか?

Zlibはオーバーヘッドを計算します。彼らは次のように述べています 。

「オーバーヘッド」のサイズを見積もることが可能であることを伝えるために、このサイトを掲載しました。

:オーバーヘッドとは、データの圧縮バージョンに追加される余分なデータの量です。

4

1 に答える 1

3

ZIP形式から..

中央ディレクトリが1 つしかなく、コメントも追加フィールドもないと仮定すると、オーバーヘッドは次のようになります。(追加のメタデータが追加された場合にのみ、オーバーヘッドが増加します。)

  • ファイルごと (ローカル ファイル ヘッダー) - 30+len(ファイル名)
  • ファイルごと (データ記述子) - 12 (16 まで)
  • ファイルごと (中央ディレクトリ ヘッダー) - 46+len(ファイル名)
  • アーカイブごと (EOCD) - 22

つまり、afnはすべてのファイル名の平均の長さで、fはファイルの数です。

  f * ((30 + afn) + 12 + (46 * afn)) + 22
= f * (88 + 2 * afn) + 22

もちろん、これにより、(ファイル) 構造やメタデータが不要な圧縮データの非常に小さなビットに対してZIP は非常に不適切な選択になります。一方、zlibは非常に薄いDeflate ラッパーです。

小さなペイロードの場合、悪名高い .NET 実装など、不適切な Deflate 実装により、「圧縮」サイズが大幅に大きくなる可能性もあります。


例:

  • 「hello world note.txt」(len = 20) という名前の 1 つのファイルを保存すると、

    = 1 * (88 + 2 * 20) + 22 = 150バイトのオーバーヘッド

  • 平均14文字の名前で100個のファイルを保存すると、

    = 100 * (88 + 2 * 14) + 22 = 11622バイトのオーバーヘッド

于 2014-03-12T09:28:31.313 に答える