zipは同じコンテンツを持つ複数のファイルよりも単一のファイルをよりよく圧縮できますか?

ファイルの共有や転送が容易になるようにファイルを圧縮することができれば、私たちの電子生活ははるかに簡単になりますが、圧縮した後で奇妙で予期せぬサイズの結果が出ることがあります。何故ですか?今日のスーパーユーザQ&Aの投稿には、混乱した読者の質問に対する回答があります。

今日の質疑応答セッションは、Q&Aウェブサイトのコミュニティ主導型のグループである、スタック交換の細分化であるスーパーユーザーからの礼儀です。

Jean-Etienne Minh-Duy Poirrier(Flickr)の写真提供。

スーパーユーザーリーダーsixtyfootersdudeは、同じ種類のコンテンツを持つ複数のファイルよりもzipが単一のファイルをよりよく圧縮できる理由を知りたい

10,000のXMLファイルがあり、それを友人に送信したいとします。それらを送る前に、私はそれらを圧縮したいと思います。

方法1:圧縮しないでください

結果

方法2:すべてのファイルを別々に圧縮し、10000個の圧縮XMLファイルを送信する

コマンド

結果

方法3:10,000のXMLファイルをすべて含む単一のZipファイルを作成する

コマンド

結果

方法4:ファイルを1つのファイルに連結して郵送する

コマンド

結果

質問

追加情報

メタデータ

与えられた答えの1つは、違いがzipファイルに格納されているシステムメタデータであることを示しています。私はこれが事実であるとは思わない。それをテストするために、私は次のことをしました

結果のzipファイルは1.4 MBです。これは、まだ約10MBの説明できないスペースがあることを意味します。

なぜzipは同じ種類のコンテンツを持つ複数のファイルよりも単一のファイルを圧縮できるのでしょうか?

スーパーユーザの貢献者Alan ShutkoとAganjuは私たちの答えを持っています。まず、アラン・シャトコ

Zip圧縮は、圧縮されるデータの反復パターンに基づいており、より長いパターンを見つけて使用できるように、ファイルが長くなるほど圧縮率が向上します。

簡略化すると、あるファイルを圧縮すると、(短い)コードを(より長い)パターンにマップする辞書は必然的に各結果のzipファイルに含まれますが、1つの長いファイルを圧縮すると、その辞書は「再利用」され、コンテンツ。

あなたのファイルが少し類似している場合(テキストが常にそうであるように)、「辞書」の再利用は非常に効率的になり、その結果、合計のzipファイルがはるかに小さくなります。

Aganjuからの答えが続く

zipでは、各ファイルは別々に圧縮されます。反対に固い圧縮、つまりファイルは一緒に圧縮されます。 7-zipとRarはデフォルトで固い圧縮を使います。 GzipとBzip2は複数のファイルを圧縮することができないため、Tarが最初に使用され、ソリッド圧縮と同じ効果があります。

XMLファイルは構造が似ているので(おそらく同様のコンテンツ)、ファイルが一緒に圧縮されていると、圧縮率が高くなります。

たとえば、ファイルに “