标准ZIP中使用哪种算法?

时间:2012-04-18 17:07:02

标签: zip gzip tar lzma lzw

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

我找到了有关ZIP == TAR + GZIP

的信息

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

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

你能帮我找到ZIP的算法吗?我想实现它。

2 个答案:

答案 0 :(得分:9)

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

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

gzip 只需要一个文件并对其进行压缩。

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

不是重新实现zip的压缩算法,而是从zlib web site下载代码(非常便携,非常自由的许可证)几乎肯定会更好。 zlib网站确实有一个相当合理的explanation算法。如果你真的坚持自己这样做,你可能还想看看RFC 195019511952

答案 1 :(得分:2)

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

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

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

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

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