在标准ZIP中使用哪种算法?

6 zip gzip tar lzma lzw

有google搜索,wikied和阅读ZIP的RFC,但找不到有关ZIP中使用的确切算法的任何信息.

我找到了有关ZIP == TAR + GZIP的信息

但是,我对此信息感到困惑.

因为我记得GZIP使用LZW算法,而TAR使用LZMA,我无法想象ZIP == TAR + GZIP(LZMA + LZW - ???)

那么你可以帮助找到ZIP的算法,我想实现它.

Jer*_*fin 9

Zip提供的功能大致相当于tar与gzip的组合.

tar只是将多个文件一起收集到一个文件中,保留有关原始文件的信息(例如,路径,日期).与问题中的陈述相反,它本身没有压缩.gzip只需要一个文件并压缩它.

Zip完成这两者 - 即,它将许多组成文件存储到存档中(同样,保留路径,日期等内容)并压缩它们.与tar + gzip不同,它单独压缩每个文件,并保留未压缩的组成文件的"目录"信息.这样可以轻松处理存档中的单个文件(插入,删除,解压缩等),但也意味着它通常不会获得整体压缩效果.

而不是重新实现zip的压缩算法,你几乎肯定最好从zlib网站下载代码(非常便携,非常自由的许可证).zlib网站确实对算法有一个相当合理的解释.如果你真的坚持自己这样做,你可能也想看看RFC 1950,1951和1952.


Mar*_*ler 5

在这种情况下,“zip”是一种允许多种不同压缩方法的文件格式。它们包括 deflate、deflate64、bzip2、lzma、wavpack 和 ppmd。然而,在实践中,为了兼容性,您几乎总是会看到 deflate 专门用于 zip 文件。

deflate 也是 gzip 和 zlib 以及 png 图像格式中使用的压缩方法。

deflate 是 LZ77 压缩器,而不是 LZ78。

tar 是一个归档器,而不是一个压缩器。它生成 .tar 文件格式。.tar 文件通常被压缩(方便地由 tar 程序本身调用外部程序),它会添加一个后缀,例如 .tar.gz 用于 gzip 压缩。tar 选项包括用于 gzip 的 -z、用于 bzip2 (.bz2) 的 -j 和用于 lzma (.xz) 的 -J。

您不需要为 deflate 实现算法。已经为你完成了。您可以在代码中使用zlib,它具有非常宽松的许可证。