你发微信传个几十MB的PSD文件,对方等半天没反应;公司同事用WinRAR打包10GB工程资料,解压后发现体积只剩6GB;甚至你随手右键「发送到→压缩文件夹」,生成的ZIP包比原文件小了一半——这些日常操作背后,都离不开压缩算法在悄悄干活。
压缩不是“删东西”,而是“换种说法”
很多人以为压缩就是把文件里多余的空格、重复内容直接删掉。其实不然。真正的压缩算法,核心是“找规律+重编码”:比如一段文字里反复出现“电脑资讯”,算法就记下这个短语,后面全用一个简短代号代替;又比如一张照片里大片蓝天,像素值高度相似,就用“蓝×256”这种方式记录,而不是逐个写256个“135,198,242”。这叫“无损压缩”,解压后和原来一模一样。
最常用的三种算法,你天天在用
DEFLATE(ZIP / GZIP 的核心)
Windows自带的.zip压缩、网页传输用的.gzip、Linux里tar.gz包,底层几乎都靠它。它把LZ77(找重复字符串)和霍夫曼编码(给高频字符分配短码)捆在一起干活。速度不慢,兼容性极强,但压缩率中等。比如一个含大量文本的日志文件,用DEFLATE能压掉40%~60%体积。
PPM(RAR / 7-Zip 高压缩模式常用)
WinRAR默认用的算法之一,7-Zip选“Ultra”模式时也会调用类似PPMd的变种。它更“聪明”:不仅记住前面几个字,还能根据上下文预测下一个字符概率。比如刚打了“电”,它猜“脑”“话”“视”可能性高,就优先给它们短编码。适合文本、代码、数据库这类结构清晰的文件,压缩率比DEFLATE高10%~20%,但耗CPU多、速度慢些。
LZMA / LZMA2(7-Zip 默认主力)
这是7-Zip的看家本领。它在LZ77基础上加了更长距离的重复匹配、更精细的区间编码,还支持多线程。一个1.2GB的安装包,用7z格式(LZMA2)压缩后可能只有850MB,而同样设置下ZIP才压到1.05GB。缺点是解压稍慢,老电脑打开大7z包会卡一下。
顺手看看命令行怎么试
想亲眼看看不同算法效果?Linux/macOS终端或Windows PowerShell里试试:
7z a -t7z archive.7z folder/ -mx=9 # 7z格式,极限压缩
7z a -tzip archive.zip folder/ -mx=9 # ZIP格式,极限压缩(实际仍走DEFLATE)
gzip -9 largefile.log # GZIP,-9代表最高压缩级注意:-mx=9在7z里真有用,在ZIP里只是摆设——因为ZIP规范本身限制了DEFLATE的压缩深度。
选哪个?看场景说话
要发邮件传合同PDF?用ZIP,对方手机点开就能解,不折腾。
存备份盘里几百GB的老项目源码?上7z + LZMA2,省空间就是省硬盘钱。
打包软件发布包,兼顾速度和体积?RAR的固实压缩(Solid Archive)不错,连续处理多个小文件时优势明显。
网页静态资源(JS/CSS)?Nginx默认开GZIP,就是DEFLATE那一套,加载快还不占服务器CPU。
算法没有绝对好坏,就像炒菜放盐——ZIP是家常盐,够用;7z是海盐,风味足但得配好锅;RAR像松露盐,特定场合才显身价。