如何评估压缩文件的最佳存档格式?


24

通常,我观察到以下内容:

  • Linux-y文件或工具使用bzip2gzip分发存档
  • Windows-y文件或工具使用ZIP分发存档
  • 许多人使用7-Zip创建和分发自己的档案

问题:

  • 这些格式(似乎都是开放格式)的优缺点是什么?我何时/为什么应该选择一个(例如7-Zip)而不是另一个(例如ZIP)?
  • 即使所有这些都是便携式格式,为什么上述趋势似乎仍然存在?在特定平台上使用特定存档格式有什么特殊优势?



@ Sathya,@ Andreas:感谢您提供的链接,这些链接对我的问题有所帮助。:)
Mehrdad

1
压缩是一个非常复杂的领域,没有任何一种算法可以为所有事情产生最佳结果-此外,这是一个问题,您可以投入大量资源并获得更好的结果,但是这几乎可以在更少的时间内完成。一些算法专注于速度快和内存占用少,一些算法专注于产生尽可能小的文件,而不管它花费多长时间,或者是否需要12GB RAM(不夸张)来执行此操作,依此类推。
Phoshi 2011年

1
@Phoshi,这应该是一个答案。
Yitzchak

Answers:


16

可用的压缩格式和方法种类繁多,有些根本不压缩,并且旨在将多个文件存储在一个档案中,而其他较新的实验性压缩器(基于PAQ)则设计为尽可能积极地进行压缩,不管执行上述操作所花费的时间如何。

您需要从压缩方法选择中评估所需的功能,并考虑使用该压缩功能的环境。

不同的功能和注意事项包括:

  • 压缩能力 - 压缩文件是否足够大?
  • 易用性 -如果文件将发送给另一个用户,则归档文件是否易于提取或需要安装更多软件?
  • 密码保护和/或加密 -是否需要这些安全措施?
  • 多卷支持 -如果目标介质要求将文件拆分为适当的块,则格式是否对此提供了优雅的支持。例如对于CD 650 MB。
  • 修复和恢复 -如果文件部分损坏,它是否提供恢复记录以帮助恢复数据?
  • Unicode支持 -存档器支持国际文件名还是仅支持标准ASCII?
  • 系统要求 -诸如7-Zip之类的现代压缩器确实可以通过使用更大的字典来提高压缩效率(字典是压缩文件中常见重复数据的引用),但这反过来又增加了压缩和压缩时的内存消耗。减压时间。
  • 自解压支持 -可以将归档文件放到可执行文件中,以方便需要使用它的人使用吗?(还请记住,您只能为单个平台创建自解压程序。通常来说,Windows自解压程序默认情况下无法在Linux上运行,除非运行通过Wine等兼容层)。
  • 文件系统属性 -压缩器是否存储相关的文件系统元数据和权限,这些内容和权限在提取时可能值得保留?

一般来说,ZIP是最普遍使用的格式,但是通常不支持超过4 GB的大小(如果有的话),通常认为安全性很差(标准密码可能会受到纯文本攻击,并且会进一步加密)通常由商业ZIP软件供应商实施为该格式的非官方衍生版本)。

除此之外,大多数其他流行的格式将通过安装更多软件在所有操作系统上提供某种形式的支持。

我个人的选择是7-Zip,它具有出色且灵活的压缩方式;尽管Windows上具有特殊的用户界面。有用于Linux和Mac OS X的解压缩器(尽管不是基于GUI的标准)。


3
如果归档文件是要分发的,则考虑目标受众并使用其平台默认支持的格式也很重要。在这种情况下,可访问性可能比其他考虑因素更为重要。
hammar 2011年

+1感谢您提供的信息,不过最好提一下哪种格式支持这些要点。:)
Mehrdad

我很想尝试,但是有许多可用的格式,要花很长时间才能列出。维基百科确实具有良好的压缩格式特征矩阵,可能会有所帮助:en.wikipedia.org/wiki/Comparison_of_archive_formats
Ruairi Fullam

1
自解压存档文件时,历史教给我们一个重要的教训。 从20年前开始就有自解压的档案文件,人们不能再进行自解压,因为他们的计算机无法运行MS / PC-DOS程序,或者由于处理器的更改导致自解压程序崩溃,或者因为自解压提取器抱怨光盘
不满

这一点确实值得商,,我还没有遇到过这个特殊的问题,但是我可以看到它的发生。我想这都是关于创建档案文件的最终目标和预期文件使用期限的问题。当然,如果您有一个旧的归档文件,很难从DOS时代中提取出来,则可以使用DOSBox,或者根据需要甚至创建VM。
Ruairi Fullam'7

8

想到的一件事是Jeff Atwood的(两岁)博客文章:Multi-Core Era中的File Compression。在那篇文章中,他发现当运行两个以上的内核时,bzip2的性能优于7-zip。


+1天!我不知道 不过,压缩率似乎不值得。:)
Mehrdad

2
该职位已超过2年。7-zip现在不可以在两个以上的内核上更好地工作吗?
cregox

由于BZIP2压缩成100-900KB的块,因此可以在多个内核上更有效地进行压缩,因此可以将块分布在单独的内核上,但是由于这些块彼此不同,因此压缩效率会降低。
Ruairi Fullam

4

对于第一个问题,7-Zip是一个存档器,可以使用许多算法来压缩和解压缩数据。

对于第二个问题,只需确保平台支持支持给定格式的工具即可。例如,我会避免在Mac上使用RAR。虽然可以使用,并且有支持它的免费实用程序,但它们缺乏支持RAR的Windows实用程序所拥有的丰富得多的界面(以我的经验)。


我个人讨厌图形化的rar程序,即使在Windows上也总是使用命令行。
Carf 2011年

4

正如其他人所提到的,特定压缩格式的选择在很大程度上取决于用途和目标受众。

  • .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) -压缩。


2

仅作为示例,在这些情况下,我使用上述格式:

  • 文本文件(尤其是日志):bz2
  • 待分发文件的集合(例如源代码):gz(实际上是tar.gz)。
  • 什锦文件:7zip。我可以以非常有效的方式压缩几乎所有内容。跨平台,开源,稳定,轻量级的文件(标题和数据)加密,...您还能要求其他吗?:)

完全避免使用RAR,并且每当我从认识的人那里收到RAR文件时,我都会告诉他/她停止使用该格式,因为它是专有格式,并且他/她可能正在使用未经许可的软件(大多数人下载WinRAR的试用版并继续使用它永远)。

PS:我运行Ubuntu(主要)和Windows(双启动和VirtualBox)。


1

至少有四个独立的工作通常会混淆在一起,因为流行的工具将它们集成在一起:

  1. 归档:将多个文件(包括元数据)组合到一个文件中的功能,可以保留尽可能多的内容。在Linux / Unix世界中,归档通常以TAR文件格式完成。
  2. 压缩:无损最小化二进制数据流大小的能力。在Linux / Unix世界中,传统上是由GZip和BZip2完成的。
  3. 加密:使用密钥对数据进行加密的能力
  4. 校验和:检测(并可能纠正)错误的能力。

.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可以充分保留所有内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.