标准ZIP使用哪种算法?

14

我已经谷歌、维基和阅读了ZIP的RFC,但无法找到有关ZIP所使用的确切算法的任何信息。

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

但是,这些信息让我感到困惑。

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

您能否帮我找到ZIP的算法? 我想实现它。


1
ZIP 可以使用多种算法。在网上某个地方有一个规范。 - Hot Licks
2
啊,在这里:Deflate,Deflate64,Implode,BZIP2,LZMA或PPMd +。 - Hot Licks
2个回答

20
Zip提供了与tar和gzip相结合的功能相当的能力。
tar只是将一些文件收集到单个文件中,保留有关原始文件的信息(例如路径、日期)。与问题陈述相反,它本身不进行压缩。
gzip只是对单个文件进行压缩。
Zip两者都可以做到——即将多个组成文件存储到归档文件中(同样保留路径、日期等信息),并对其进行压缩。与tar + gzip不同的是,它会单独压缩每个文件,并保留组成文件的“目录”信息不压缩。这使得在归档文件中处理单个文件变得容易(插入、删除、解压等),但也意味着它通常无法获得更好的压缩效果。

与其重新实现zip的压缩算法,您几乎肯定最好从zlib网站下载代码(非常便携,许可证非常宽松)。 zlib网站对算法有一个相当合理的解释。 如果您真的坚持要自己做这件事,您可能还需要查看RFC 1950, 1951, 和 1952


1
这也是 Wikipedia 所说的。 - fb55
1
请注意,zlib仅实现压缩/解压缩功能,而不是存档机制。 - Hot Licks
1
如果您想获取归档部分的代码,可以在Info-zip网站找到它。 - Jerry Coffin

6
在这个上下文中,“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表示gzip,-j表示bzip2(.bz2),-J表示lzma(.xz)。
你不需要实现deflate算法,因为已经有人为你做了。你可以在代码中使用zlib,它具有非常宽松的许可证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接