通常,我观察到以下内容:
问题:
- 这些格式(似乎都是开放格式)的优缺点是什么?我何时/为什么应该选择一个(例如7-Zip)而不是另一个(例如ZIP)?
- 即使所有这些都是便携式格式,为什么上述趋势似乎仍然存在?在特定平台上使用特定存档格式有什么特殊优势?
通常,我观察到以下内容:
问题:
Answers:
可用的压缩格式和方法种类繁多,有些根本不压缩,并且旨在将多个文件存储在一个档案中,而其他较新的实验性压缩器(基于PAQ)则设计为尽可能积极地进行压缩,不管执行上述操作所花费的时间如何。
您需要从压缩方法选择中评估所需的功能,并考虑使用该压缩功能的环境。
不同的功能和注意事项包括:
一般来说,ZIP是最普遍使用的格式,但是通常不支持超过4 GB的大小(如果有的话),通常认为安全性很差(标准密码可能会受到纯文本攻击,并且会进一步加密)通常由商业ZIP软件供应商实施为该格式的非官方衍生版本)。
除此之外,大多数其他流行的格式将通过安装更多软件在所有操作系统上提供某种形式的支持。
我个人的选择是7-Zip,它具有出色且灵活的压缩方式;尽管Windows上具有特殊的用户界面。有用于Linux和Mac OS X的解压缩器(尽管不是基于GUI的标准)。
想到的一件事是Jeff Atwood的(两岁)博客文章:Multi-Core Era中的File Compression。在那篇文章中,他发现当运行两个以上的内核时,bzip2的性能优于7-zip。
对于第一个问题,7-Zip是一个存档器,可以使用许多算法来压缩和解压缩数据。
对于第二个问题,只需确保平台支持支持给定格式的工具即可。例如,我会避免在Mac上使用RAR。虽然可以使用,并且有支持它的免费实用程序,但它们缺乏支持RAR的Windows实用程序所拥有的丰富得多的界面(以我的经验)。
正如其他人所提到的,特定压缩格式的选择在很大程度上取决于用途和目标受众。
.tar.gz和tar.bz2归档文件非常适合在Linux系统上使用(并通过扩展与Linux用户共享文件),因为tar,gzip和bzip2工具在平台上普遍存在,并且.tar格式具有完整的支持Unix权限和其他平台特定的属性。在gzip和bzip2之间选择压缩tar档案主要是关于速度与压缩比的决定,bzip2提供较小的文件,但压缩速度要慢得多。这些格式的缺点包括与Windows的兼容性较弱,并且(可能)需要解压缩整个存档以提取单个文件。
可以使用本机工具在大多数平台上提取ZIP归档文件,因此,这是将归档文件发送给非技术用户的理想选择,该用户可能会不喜欢安装第三方归档软件(例如7-Zip)。压缩级别不如更高级的算法好,并且不支持Unix权限,但是,例如,如果您想将假日照片的存档发送给祖母,则压缩级别是一种很好的格式。ZIP还提供了一些基本的密码保护,并且可以从存档中的任何位置快速提取文件。
如果您想获得最佳压缩率,则7-Zip很好。与ZIP一样,它不支持Unix文件权限或所有权,并且默认情况下在大多数平台上也未安装,这使得它的工作量有所增加,但是如果要提高压缩率,则在Windows上值得这样做。在全Linux环境中,最好与tar一起使用'xz'或'lzma'压缩工具,它们的工作方式与'gzip'和'bzip2'完全相同,但使用更高级的LZMA算法(例如7) -压缩。
至少有四个独立的工作通常会混淆在一起,因为流行的工具将它们集成在一起:
.tar.gz和.tar.bz的普遍存在与Unix的哲学相一致,即小型工具可以很好地完成一项工作,而不是只执行一项工作。TAR文件格式不支持压缩或加密,但是可以由任何压缩程序(包括.tar.zip或.tar.7z)进一步压缩。GZip和BZip2的工作仅仅是将文件流压缩为另一个文件流,压缩层无需关心如何保留元数据或加密或校验和。但是,随着时间的流逝,tar
程序中已经有一些快捷方式可以更方便地与压缩器一起使用。
在zip和7z文件格式中,这些单独的作业由单个程序以单一超级文件格式完成。
即使所有这些都是便携式格式,为什么上述趋势似乎仍然存在?在特定平台上使用特定存档格式有什么特殊优势?
由于已经做到了这一点,因此程序源代码通常以.tar.gz或.tar.bz2分发,因为保留文件许可权,修改时间等对于用于编程的各种工具(例如make)很重要。
单独的归档和压缩步骤已经运行了很多年,它具有可以自由混合和匹配归档和压缩的明显优势,并且可以通过开发更智能的工具轻松地克服其缺点(两步压缩过程)(最现代的linux压缩程序将直接压缩为.tar.gz或.tar.bz2,隐藏了中间步骤)。
没有充分的理由转向其他文件格式,较新的压缩器没有明显更好的压缩率来证明打破传统,而tar可以充分保留所有内容。