2012-04-18 23 views
5

ZIPのRFCを読んで、ウィキッドで読んでいますが、ZIPで使用されている正確なアルゴリズムに関する情報は見つかりませんでした。標準的なZIPではどのアルゴリズムが使用されていますか?

私はZIPについての情報を発見した== TAR + GZIP

しかし、私はこの情報で混乱しています。

私が覚えているようGZIPは、LZWアルゴリズムを使用し、TARは、LZMAを使用し、私はZIP == TAR + GZIP(LZMA + LZW - ???)することができる方法を想像することはできませんのであなたがするのに役立つ可能性が

ZIPのアルゴリズムを見つけると、私はそれを実装したいと思います。

+1

ZIPは、いくつかのアルゴリズムのいずれかを使用できます。ウェブ上にどこかに敷設された仕様があります... –

+1

ああ、[ここにあります](http://www.pkware.com/documents/casestudies/APPNOTE.TXT):Deflate、Deflate64、Implode、BZIP2、LZMA、またはPPMd +。 –

答えて

7

ジップは、タールとgzipとの組み合わせにほぼ相当する機能を提供します。

tarは、元のファイルに関する情報(パス、日付など)を保存したまま、多数のファイルをまとめて1つのファイルにまとめます。質問のステートメントとは逆に、は、そのもので圧縮します。 gzipは単一のファイルを受け取り、圧縮します。

ジップは、複数の構成ファイルをアーカイブに保存して(パス、日付などのようなものを保存する)、それらを圧縮します。 tar + gzipとは異なり、各ファイルを個別に圧縮し、圧縮されていない構成ファイルに関する「ディレクトリ」情報を残します。これにより、アーカイブ内の個々のファイル(挿入、削除、解凍など)での作業が容易になりますが、通常は全体的に圧縮効率が上がらないことも意味します。

zipの圧縮アルゴリズムを再実装するのではなく、zlib web siteからコードをダウンロードするほうがはるかに優れています(非常に移植性があり、非常に自由なライセンス)。 zlibのWebサイトには、かなり妥当なexplanationのアルゴリズムがあります。あなた自身が本当にこのことを主張しているのであれば、おそらくRFC 1950、1951、および1952も参照してください。

+1

それはまた、[Wikipedia](http://en.wikipedia.org/wiki/Tar_(file_format)#Naming_of_compressed_tar_files)が言います。 – fb55

+1

zlibはアーカイブメカニズムではなく、圧縮/解凍のみを実装しています。 –

+1

@HotLicks:そうです。アーカイブ部分のコードが必要な場合は、[Info-zip web site](http://www.info-zip.org)にあります。 –

1

「zip」は、いくつかの異なる圧縮方法を許可するファイル形式です。それらには、deflate、deflate64、bzip2、lzma、wavpack、およびppmdが含まれます。しかし実際には、ほとんどの場合、互換性のためにzipファイルで排他的に使用されることがほとんどです。

deflateは、gzipとzlib、およびpngイメージ形式で使用される圧縮方法です。

deflateはLZ77ではなくLZ77圧縮器です。

tarは圧縮ファイルではなくアーカイバです。 .tarファイル形式を生成します。 .tarファイルは通常圧縮されています(外部プログラムを呼び出すtarプログラム自体が便利です)。 gzip圧縮の場合は.tar.gz。 tarオプションには、gzipでは-z、bzip2(-bz2)では-j、lzma(-xz)では-Jが含まれます。

deflateのアルゴリズムを実装する必要はありません。それはあなたのために行われています。コードにzlibを使用することができます。これは非常に自由なライセンスを持っています。

関連する問題