ZIP の RFC をグーグル、ウィキ、および読みましたが、ZIP で使用されている正確なアルゴリズムに関する情報が見つかりません。
ZIP == TAR + GZIP に関する情報を見つけました
しかし、私はこの情報に混乱しています。
私が覚えているように、GZIPはLZWアルゴリズムを使用し、TARはLZMAを使用するため、ZIP == TAR + GZIP (LZMA + LZW - ???)
ZIPのアルゴリズムを見つけるのを手伝ってくれませんか? 実装したいです。
Zip は、tar と gzip の組み合わせとほぼ同等の機能を提供します。
tarは、多数のファイルを 1 つのファイルにまとめて、元のファイルに関する情報 (パス、日付など) を保持するだけです。質問のステートメントに反して、それ自体は圧縮しません。
gzipは、単一のファイルを取り、それを圧縮します。
Zipはこれらの両方を行います。つまり、多数の構成ファイルをアーカイブに保存し (ここでも、パスや日付などを保持します)、それらを圧縮します。tar + gzip とは異なり、各ファイルを個別に圧縮し、構成ファイルに関する「ディレクトリ」情報を非圧縮のままにします。これにより、アーカイブ内の個々のファイルの操作 (挿入、削除、解凍など) が容易になりますが、通常、全体的に圧縮率が低下することも意味します。
zip の圧縮アルゴリズムを再実装するよりも、zlib の Web サイトからコード (非常に移植性が高く、非常にリベラルなライセンス) をダウンロードする方がほぼ確実に優れています。zlib の Web サイトには、アルゴリズムのかなり合理的な説明があります。これをどうしても自分でやりたい場合は、おそらくRFC 1950、1951、および1952も参照することをお勧めします。
このコンテキストでの「zip」は、いくつかの異なる圧縮方法を許可するファイル形式です。それらには、deflate、deflate64、bzip2、lzma、wavpack、および ppmd が含まれます。ただし、実際には、ほとんどの場合、deflate は互換性のために zip ファイルでのみ使用されます。
deflate は、gzip や zlib、png 画像形式で使用される圧縮方法でもあります。
deflate は LZ78 ではなく LZ77 コンプレッサーです。
tar はコンプレッサーではなくアーカイバーです。.tar ファイル形式を生成します。.tar ファイルは通常、gzip 圧縮用の .tar.gz などの接尾辞を追加して圧縮されます (tar プログラム自体が外部プログラムを呼び出すことにより便利です)。tar オプションには、gzip の場合は -z、bzip2 (.bz2) の場合は -j、lzma (.xz) の場合は -J が含まれます。
deflate のアルゴリズムを実装する必要はありません。それはあなたのために行われました。非常にリベラルなライセンスを持つzlibをコードで使用できます。