七千二百袋水泥
七千二百袋水泥
发布于 2024-04-13 / 397 阅读
0

压缩算法、压缩格式及压缩软件的详解

在实际的生活当中,我是会观察一个人发送过来的压缩文件的格式的,其实主要就是对于rar的反感,和反感微信语音一样。当然使用rar这种压缩格式,没有像大段的微信语音那样令人窒息,因为很多人可能确实不懂这些东西,无意的冒犯构成不了冒犯。但是一个搞技术的人,突然给我发了一个rar包,我真的会歧视你的。

压缩算法

在正式聊压缩格式及软件之前,我们先回顾一下历史上的这些伟大先贤,他们的闪光的智慧,给人类带来了压缩算法。

  1. Huffman Coding 发布于1952年

    • 思想:Huffman 编码是一种变长编码,通过使用较短的编码表示频率较高的字符,而使用较长的编码表示频率较低的字符,以实现数据压缩。

    • 作者:David A. Huffman,美国计算机科学家,1925 年出生,于 1999 年去世。他在 MIT 进行研究,并在 1952 年提出了 Huffman 编码,被认为是信息论和数据压缩领域的重要贡献之一。

  2. LZ77 和 LZ78 发布于1977年及1978年

    • 思想:LZ77 和 LZ78 是基于词典的数据压缩方法。LZ77 使用滑动窗口和指针来表示重复的数据,而 LZ78 则使用词典来存储数据,并将重复出现的字符串替换为词典中的索引。

    • 作者:Abraham Lempel 和 Jacob Ziv,两位以色列计算机科学家。Abraham Lempel 生于1936年,Jacob Ziv 生于1931年。他们于1977年和1978年分别发表了 LZ77 和 LZ78 的论文,开创了词典压缩的先河。

  3. DEFLATE 压缩算法 发布于1986年

    • 思想:DEFLATE 算法是一种无损压缩算法,结合了 LZ77 和哈夫曼编码。它使用滑动窗口来寻找重复的数据,并使用哈夫曼编码来表示字符序列,以实现高效的数据压缩。

    • 作者:Phil Katz,美国计算机程序员,生于1962年,于2000年去世。他于1986年创建了 PKWARE 公司,并于1989年推出了 Zip 格式和 PKZIP 软件,其中包含了 DEFLATE 算法的实现。

  4. LZMA(Lempel-Ziv-Markov chain Algorithm)发布于1999年 LZMA2 则是在 LZMA 后不久引入的改进版本

    • 思想:LZMA 是一种基于 Lempel-Ziv 算法和马尔可夫链的数据压缩算法。它使用滑动窗口和预测模型来识别重复的数据,并采用不同的编码策略来实现高效的压缩。

    • 作者:Igor Pavlov,俄罗斯程序员,生于1975年。他于1999年发布了 7-Zip 软件,并在其中实现了 LZMA 算法。

  5. Burrows-Wheeler Transform(BWT)BWT本身并不是一种压缩算法发布于1996之前吧

    • 思想:BWT 是一种数据转换算法,通过对输入数据的重排列来增加数据中重复模式的出现,从而便于压缩算法的识别和利用。

    • 作者:这个算法的名称来源于英国的两位科学家 Michael Burrows 和 David Wheeler。Michael Burrows 是一位计算机科学家,主要在 DEC 和 Google 工作,贡献了许多在计算机科学领域的研究。David Wheeler 是一位英国计算机科学家和教育家,曾是剑桥大学的教授,对计算机科学领域有深远的影响。

压缩格式

压缩格式

压缩算法

文件/文件夹压缩

压缩效率

ZIP

DEFLATE

文件和文件夹

中等

GZ

DEFLATE

文件

中等

7Z

LZMA

文件和文件夹

高

RAR

RAR(Roshal Archive压缩算法)

文件和文件夹

高

XZ

LZMA2

文件和文件夹

非常高

BZ2

Bzip2

文件

中等

文件归档,tar的介绍及常用命令

我们可以注意到上边的部分压缩格式,只支持单文件的压缩,因此需要和tar进行组合。

tar 最初是在 1979 年由 AT&T Unix 的开发者 Dennis Ritchie 和 Ken Thompson 开发的。当时,Unix 系统的文件系统不具备将多个文件和目录组合成单一归档文件的能力。因此,tar 工具被设计用来解决这个问题,以便于在磁带上进行备份和传输。

常见的 tar 命令选项包括:

  • -c:创建归档文件。

  • -x:解压归档文件。

  • -f:指定归档文件的名称。

  • -v:显示详细信息,通常用于查看正在进行的操作。

  • -z:配合 gzip 使用,进行 gzip 压缩。

  • -j:配合 bzip2 使用,进行 bzip2 压缩。

  • -J:配合 xz 使用,进行 xz 压缩。

组合:

格式

压缩命令

解压缩命令

gzip

tar -czvf archive.tar.gz files...

tar -xzvf archive.tar.gz

bzip2

tar -cjvf archive.tar.bz2 files...

tar -xjvf archive.tar.bz2

xz

tar -cJvf archive.tar.xz files...

tar -xJvf archive.tar.xz

操作系统对于压缩格式支持的情况

操作系统

原生支持的压缩格式

原生支持的解压缩格式

Windows ME 至 Windows 10

zip - 但不包含密码保护

zip

Windows 11(自 2023 年 10 月起)

zip - 但不包含密码保护

zip, 7z, rar, gz, tar.bz2, tar.zst, tar.xz, tgz, tzst & txz(不含密码)

macOS

zip & cpgz - 但不包含密码保护

zip, 7z, bzip, bzip2, cpxz, gzip, hqx, uu, tx (tar.bz2) & txz (tar.xz)(不含密码)

Linux

通常至少包含 zip, gz, xz, bz2, tar.gz, tar.b2z & tar.xz(因发行版而异)

##通常至少包含 zip, gz, xz, bz2, tar.gz, tar.b2z & tar.xz(因发行版而异)

如何选择日常的压缩格式

时至今日,每个人的电脑磁盘,CPU性能,带宽和最初已经出现了质的飞跃。我们使用压缩软件,一般而言不是为了节省磁盘空间、或者降低网络传输的时长。

日常生活中,我们之所以还在使用压缩格式,主要是方便打包,然后扔到网盘、微信等工具进行传输。

因此最重要的事情是什么?

兼容性

兼容性

兼容性

所以日常压缩,毫无疑问推荐zip格式,假如文件确实比较大,那就用7z。

有句话对于前端开发人员说,把dist打成一个rar包,放到Linux去解压,真的是一个很搞笑的行为。

压缩软件的选择

日常使用,推荐7-zip。

压缩软件

是否免费

是否纯命令行

支持的平台

支持的压缩格式

7-Zip

是

否

Windows, Linux, macOS

7z, ZIP, TAR, GZip, BZip2, XZ, WIM, LZMA, DEB, MSI, RAR, CAB

PKZIP

否

否

Windows

ZIP, TAR, JAR

WinZip

否

否

Windows, macOS, iOS, Android

ZIP, ZIPX, RAR, 7Z, GZ, TAR, ISO, IMG, XZ, LHA, LZH

GZip

是

是

Unix/Linux

GZ

XZ Utils

是

是

Unix/Linux

XZ, LZMA

BZip2

是

是

Unix/Linux, Windows

BZ2

WinRAR

否

否

Windows, macOS, Linux

RAR, ZIP, CAB, ARJ, LZH, TAR, GZ, UUE, BZ2, JAR, ISO

当然,还有一类人会使用360压缩,假如你非要用,建议你使用海外版的。

本站还有一篇关于文件系统的普及文章,感兴趣的话,可以续读,可以让你更科学的选择文件系统:

https://chuizi.tech/archives/%E5%90%84%E4%B8%AA%E7%B1%BB%E5%88%ABfile%20systems%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E8%AF%A6%E8%A7%A3