ホームページ » の仕方 » なぜZipは単一のファイルを同じ内容の複数のファイルよりも圧縮できるのでしょうか。

    なぜZipは単一のファイルを同じ内容の複数のファイルよりも圧縮できるのでしょうか。

    ファイルを共有したり転送したりするのが簡単になるようにファイルを圧縮できるようにすると、電子生活がはるかに容易になりますが、圧縮した後に奇妙なまたは予期しないサイズ設定結果が表示されることがあります。何故ですか?本日のSuperUser Q&A投稿には、混乱した読者の質問に対する答えがあります。.

    本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.

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

    質問

    SuperUserの読者sixtyfootersdudeは、zipが同じ種類のコンテンツを持つ複数のファイルよりも単一のファイルを圧縮できる理由を知りたいのです。

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

    方法1:それらを圧縮しない

    結果:

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

    コマンド:

    結果:

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

    コマンド:

    結果:

    方法4:ファイルを単一のファイルに連結して圧縮する

    コマンド:

    結果:

    質問

    • 1つのファイルを圧縮するだけで、こんなに劇的に良い結果が得られるのはなぜですか??
    • 方法2ではなく方法3を使用すると、劇的に良い結果が得られると期待していましたが、そうではありません。どうしてこれなの?
    • これはzip特有の動作ですか? Gzipを使用した場合、異なる結果が得られますか?

    追加情報

    メタデータ

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

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

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

    答え

    SuperUserの貢献者であるAlan ShutkoとAganjuが私たちのために答えを持っています。まずはAlan Shutkoさん。

    Zip圧縮は、圧縮されるデータ内の繰り返しパターンに基づいており、ファイルが長ければ長いほど、より多くのパターンを見つけて使用できるため、圧縮率が向上します。.

    簡単に言うと、1つのファイルを圧縮する場合、(短い)コードを(長い)パターンにマップする辞書は、結果として得られる各zipファイルに必ず含まれています。 1つの長いファイルを圧縮すると、辞書は「再利用」され、すべてのコンテンツにわたってさらに効果的になります。.

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

    Aganjuからの回答が続きます。

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

    xmlファイルは似たような構造(そしておそらく似たような内容)を持っているので、ファイルが一緒に圧縮されている場合、圧縮率は高くなります。.

    たとえば、ファイルに““という文字列が含まれているとします。そして、コンプレッサーはすでに別のファイルでその文字列を見つけたので、それを前のマッチへの小さなポインタに置き換えます。コンプレッサーがソリッド圧縮を使用しない場合、ファイル内の最初の文字列は次のように記録されます。 リテラル, 大きい方.


    説明に追加するものがありますか?コメントで音を消す。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッドをチェックしてください。.