跳到主要内容

压缩技术实战教程


压缩技术实战教程

——————————————

本教程覆盖:

  1. 压缩基础知识
  2. Windows 压缩工具(ZIP / WinRAR / 7-Zip)
  3. WinRAR 所有常用选项完整解释(含分卷、固实、加密)
  4. Linux 压缩与常用命令
  5. Python 中的压缩
  6. 如何选择压缩格式(决策指南)
  7. 工程实践与踩坑总结

本教程偏向“使用”,但会穿插必要的原理,让你知道为什么。


第一章:压缩技术的基本概念

1.1 压缩是什么

压缩主要是通过编码减少数据所占空间,常见用途包括节省存储和传输带宽。

需要区分两个概念:**打包(archive)**负责把多个文件组织进一个归档,**压缩(compression)**负责减少数据体积。ZIP、7z、RAR 往往同时完成两件事,而 tar 本身主要负责打包,再配合 gzip/xz/zstd 压缩。

常见用途:

  • 节省存储空间
  • 方便传输
  • 减少网络带宽
  • 将多个文件整理进同一个归档包

1.2 两种压缩方式

无损压缩(Lossless)

压缩后解压能完全恢复原文件。
ZIP、RAR、7z、PNG、Gzip 都属于这一类。

有损压缩(Lossy)

压缩时会丢失一部分信息,常见例子有 JPEG、MP3,以及使用有损编码的视频。需要注意:MP4 本身是容器格式,实际是否有损取决于内部编码;WebP 同时支持有损和无损模式。

本教程主要讲 无损压缩与文件归档。


第二章:Windows 压缩工具

在 Windows 上,最常用压缩工具有:

  • ZIP(系统自带)
  • WinRAR(最常用)
  • 7-Zip(开源、压缩率高)

这里我们主要讲实战最强的:WinRAR 与 7-Zip。


2.1 ZIP(系统自带)

优点:

  • 无需额外软件
  • 通用兼容性最强(给别人传最好用)

缺点:

  • 相比 7z/RAR,在部分数据上的压缩率可能一般
  • Windows 自带的 ZIP 创建功能通常不提供密码加密;ZIP 格式本身可以由第三方工具使用加密扩展,不能简单理解为“ZIP 一定是弱加密”

使用方法:
右键 → 发送到 → 压缩(zipped)文件夹。

适合:办公文档、代码、随手发别人。


2.2 7-Zip(7z 格式)

特点:

  • 在很多文本、代码和重复数据场景下能取得较高压缩率,具体结果取决于数据类型和参数
  • 开源免费
  • 7z 格式支持 AES-256 加密
  • 支持分卷

界面比较简洁。
适合:工程压缩、代码包、长期归档。


2.3 WinRAR

WinRAR 在 Windows 上使用很广,RAR 格式支持分卷、固实压缩、恢复记录和加密等功能。
适合:分卷压缩、大文件管理、加密归档等场景。

下面按 WinRAR 的常见压缩界面逐项记录。


第三章:WinRAR 压缩界面完整教程(逐项解释)

该部分为全教程核心。

3.1 基础设置

1)压缩文件名(A)

最终压缩包的名称,比如:

backup.rar
project.zip
cs.part1.rar

3.2 压缩文件格式(RAR / RAR4 / ZIP)

RAR(推荐)

压缩率高
加密强(AES-256)
支持分卷
稳定性好

RAR4

旧版 RAR 格式,主要用于兼容不能读取新版 RAR 格式的老软件或旧环境。

ZIP

兼容性最好,但压缩率低。
发给别人用 ZIP 更稳。


3.3 压缩方式(重点)

决定压缩率 vs 速度:

选项 说明
存储 不压缩,只打包
速度最快 最快,但压缩率最差
最快 比较快
普通 默认平衡
好 压缩率更好
最好(推荐) 压得最小,但速度最慢

日常建议:

  • 空间优先 → 最好
  • 速度优先 → 普通
  • 只打包 → 存储

3.4 字典大小(D)

字典大小会影响压缩器能够利用的重复数据范围:

  • 更大的字典在部分重复数据上可能提高压缩率
  • 但压缩和解压都需要更多内存

具体默认值会随 RAR 版本、格式和压缩配置变化,日常一般先使用默认值。只有确认文件类型和内存条件适合时,再把字典调大;并不是文件越大就一定应该把字典设得越大。


3.5 分卷压缩(切分为分卷)

用途:
把一个大文件拆成多个小压缩包。例如发给别人、传网盘。

你填:500M压缩包将变成:

backup.part1.rar
backup.part2.rar
backup.part3.rar
...

常见设置:

  • 100M
  • 500M
  • 1G

特别适合 U 盘 FAT32(最大文件 4GB 限制)。


3.6 压缩选项(右侧复选框)

(1)压缩后删除原文件

压缩成功后把源文件删掉。
风险大,不建议勾选。

(2)创建自解压格式压缩文件(.exe)

生成 .exe 文件,不需要 WinRAR 就能解压。
适合发给不会用压缩软件的人。

(3)创建固实压缩(Solid Archive)

适合大量相似或重复度较高的小文件。

特点:

  • 往往能进一步提高压缩率
  • 随机提取单个文件时可能需要先解压同一固实块中位于它之前的数据,因此速度会变慢
  • 固实块越大,单文件提取和损坏后的影响范围通常越大

建议:

  • 小文件多 → 勾
  • 大文件 → 不勾也行

(4)添加恢复记录

RAR 可以在归档中加入恢复记录,为部分损坏提供修复冗余,但会增加压缩包体积,也不能代替正常备份。

用途:

  • 长期保存的重要 RAR 归档
  • 需要额外容错的数据传输/存储场景

(5)测试压缩文件

压缩完自动检查是否完整。

用于重要文件备份。

(6)锁定压缩文件

锁定后 WinRAR 会阻止继续向该归档添加、删除或修改内容,但这不等于把磁盘上的文件设置成 Windows“只读”属性,也不能防止文件本身被删除或替换。
适合存档。


3.7 设置密码(P)

新版 RAR 格式支持 AES-256 加密,但实际安全性还取决于密码强度。短密码、常见密码即使用强算法也可能被字典或暴力猜测。

敏感归档如果不希望别人连文件名都看到,可以勾选:
✔ 加密文件名

作用:
别人根本看不到里面有哪些文件:

显示为:

[需要密码]

适合敏感信息、机密文件。


第四章:7-Zip 实战(高压缩率)

7z 在很多文件类型上能取得较高压缩率,但不存在对所有数据都“压得最小”的单一格式,实际结果还受算法、参数和原始数据影响。

常用命令

压缩:

7z a archive.7z folder/

最高压缩:

7z a -t7z -mx=9 archive.7z folder/

分卷:

7z a -v500m archive.7z folder/

加密:

7z a -pPassword -mhe=on archive.7z folder/

-mhe=on = 加密文件名。上面的写法适合说明参数,但真实密码直接写在命令行里可能进入 shell 历史或被本机其它进程看到;实际使用时可以只写 -p,让 7-Zip 交互输入密码。


第五章:Linux 主流压缩方式

Linux 打包通常是:

tar + 压缩算法

tar.gz(常用)

tar -czvf file.tar.gz folder/
tar -xzvf file.tar.gz

tar.xz(压得更小)

tar -cJvf file.tar.xz folder/
tar -xJvf file.tar.xz

Zstd(偏重高吞吐)

tar --zstd -cvf file.tar.zst folder/
tar --zstd -xvf file.tar.zst

tar --zstd 需要当前 tar 构建支持 Zstandard,并且系统中具备相应支持;老发行版可能需要先安装/升级相关工具。

也可单独压:

zstd bigfile
unzstd bigfile.zst

第六章:Python 压缩实战

Python 内置 zip/tar 支持。

ZIP:

import zipfile

with zipfile.ZipFile("data.zip", "w", zipfile.ZIP_DEFLATED) as z:
    z.write("test.txt")

TAR:

import tarfile

with tarfile.open("data.tar.gz", "w:gz") as tar:
    tar.add("folder/")

Zstd(高性能)

import zstandard as zstd
c = zstd.ZstdCompressor(level=10)

with open("a", "rb") as fin, open("a.zst", "wb") as fout:
    fout.write(c.compress(fin.read()))

上面的写法简单,但 fin.read() 会把整个文件读进内存,适合小文件。处理大文件时更适合使用流式压缩:

import zstandard as zstd

c = zstd.ZstdCompressor(level=10)
with open("a", "rb") as fin, open("a.zst", "wb") as fout:
    with c.stream_writer(fout) as compressor:
        for chunk in iter(lambda: fin.read(1024 * 1024), b""):
            compressor.write(chunk)

第七章:如何选择压缩格式(决策)

需求 常见选择
发给别人、优先兼容性 ZIP
追求较高压缩率 7z / RAR,具体以文件类型和参数实测为准
追求较高压缩/解压吞吐 Zstd 通常是很好的选择
分卷 RAR / 7z 都可以
加密归档 7z / 新版 RAR,可使用 AES-256,并配合强密码
Linux 归档 tar.gz / tar.xz / tar.zst
大量相似小文件 可考虑 7z / RAR 的固实压缩

第八章:工程实践与注意事项

  1. 已经高度压缩的文件通常很难再明显变小(如多数 MP4/JPG/ZIP),但仍可以为了打包、加密或分卷而再次归档。
  2. 固实压缩更适合大量相似文件;是否适合大文件取决于数据内容和是否需要频繁单独提取。
  3. 分卷适合网盘上传、介质单文件大小受限等场景,恢复时通常需要所有分卷都完整。
  4. 含敏感信息的归档应使用可靠加密和强密码;普通重要文件更关键的是备份、校验和多副本,而不是一律加密。
  5. RAR 的恢复记录可提供额外容错,但不能替代备份。
  6. SSD 可以提高读写吞吐,但压缩速度也可能受 CPU、算法和内存限制,并非大文件只有放在 SSD 才适合压缩。
  7. Linux 大文件可以优先考虑 Zstd,它通常在压缩率和速度之间有较好的平衡;若更看重极限压缩率或兼容性,再选择 xz、gzip 等。

文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
赏
评论

评论将在接近此处时加载,也可点击立即加载。

  目录