常见的通用压缩格式详解

一、常见压缩档

*.zip | zip 程式壓縮打包的檔案; (很常见,但是因为不包含编码格式信息,不适合跨平台使用)
*.gz | gzip 程式壓縮的檔案; (linux目前使用最广泛的压缩格式)
*.bz2 | bzip2 程式壓縮的檔案;
*.xz | xz 程式壓縮的檔案;
*.tar | tar 程式打包的資料,並沒有壓縮過;
*.tar.gz | tar 程式打包的檔案,其中並且經過 gzip 的壓縮 (最常见)
*.tar.bz2 | tar 程式打包的檔案,其中並且經過 bzip2 的壓縮
*.tar.xz | tar 程式打包的檔案,其中並且經過 xz 的壓縮 (新一代压缩选择)
*.7z | 7zip 程式压缩打包的档案。

二、以能否压缩多文件分类

  1. gzip bzip2 xz 这三个压缩格式都只能压缩单个文件。(换而言之,该格式只针对流做处理,本身不包含文档树信息。)
    因此如果要用它们压缩多个文件或目录,需要使用另一个软件来先将要压缩的文档整合成一个文件,这个命令就是 tar.
    先使用 tar 归档要压缩的多文件,再对生成的 *.tar 使用 上述压缩指令,linux 下是这样实现多文件压缩的。

  2. 而 7z 和 zip,以及 rar 格式,都同时具有了 归档(tar) 和 压缩 两个功能,(也就是该格式包含了文档树信息咯)也就是说它们可以直接压缩多个文件。

三、各格式使用的算法差别

  1. gzip 成熟的格式,使用的算法基于 DEFLATE。
  2. 7z 新一代格式,使用的压缩算法可替换,默认是使用的 lzma/lzma2 算法,使用 AES-256 作为加密算法。
  3. xz 同样使用的 lzma/lzma2 算法,不过只能压缩一个文件。
  4. zip 同样是支持多种算法的压缩格式,默认应该是使用的 DEFLATE 算法。诞生较早,有很多缺陷。(跨平台乱码、容易被破解等)
  5. rar 使用 类DEFLATE 的专有算法,使用 AES 加密。(rar5.0 以后使用 AES-256CBC)

不过 zip 被广泛应用在 安卓的 apk 格式、java 的 jar 等格式中,原因嘛没找到。

拓展:无损压缩算法中,除了现在常用的 lzma/lzma2/deflate 这种通用算法外,最近又涌现出一些专用算法,在 web 上应用的较多。
而在音频、视频、图片领域,通常使用的是有损压缩算法。

四、如何选用压缩方案

  1. gzip 在 linux 上最常见,在压缩率和压缩时间拥有良好的平衡。如果有任何疑惑,就选用它吧,不会错。
  2. xz 是新一代的压缩格式,虽然拥有更好的压缩率,压缩/解压速度相对要慢很多倍。一般在电脑性能足够好的时候,可选用它。
  3. tar 一般需要压缩的都不止一个文档,所以通常都使用 tar 来完成压缩(通过 tar 的参数来调整格式)
  4. 7z 和 xz 同为新一代压缩格式,它更复杂,支持多文件压缩。而且更适合跨平台,推荐使用。
  5. zip 因为跨平台容易导致文件名乱码,不建议使用。
  6. rar 性能不差,但是是商业格式,不开源,不建议使用。
  7. bz2 算是 linux 压缩历史上,过渡时期的产物,性能也介于 gz 和 xz 之间,一般来说不需要考虑它。

猜你喜欢

转载自www.cnblogs.com/kirito-c/p/8954792.html