Gzip 压缩介绍
约 861 字大约 3 分钟
2025-06-29
简介
Gzip 是一种常用的数据压缩格式,由 Jean-loup Gailly 和 Mark Adler 开发,其名称源于 GNU zip。它 基于 DEFLATE 算法,这是一种无损数据压缩算法,结合了 LZ77 算法 和 哈夫曼编码。
Gzip 通常用于在网络传输中压缩文件,以减少数据传输量,提高传输速度,节省带宽。在 Web 开发中,服务器常使用 Gzip 压缩 HTML、CSS、JavaScript 等静态资源,浏览器在接收到压缩数据后进行解压缩。
压缩流程
- 输入数据分块:将待压缩的原始数据分割成多个小块,便于处理。
- LZ77 编码:对每个数据块使用 LZ77 算法进行处理,该算法会在数据中查找重复出现的字符串,并将其替换为指向之前出现位置的指针和长度,以此来减少重复数据的存储。例如:
"abc123abc456"
→"abc123<6,3>456"
(<6,3>
表示向前 6 个字符开始复制 3 个字符) - 哈夫曼编码:对经过 LZ77 编码后的数据使用哈夫曼编码,根据字符出现的频率为每个字符分配变长编码,出现频率高的字符使用较短的编码,从而进一步压缩数据。
- 添加文件头和校验和:在压缩后的数据前添加 Gzip 文件头,包含压缩方法、时间戳等信息;在数据末尾添加校验和,用于解压缩时验证数据的完整性。
- 输出压缩数据:将处理好的数据组合成最终的 Gzip 压缩文件。
解压缩流程
- 读取文件头:从 Gzip 文件开头读取文件头信息,确认文件格式和压缩方法。
- 验证文件格式:检查文件头信息是否符合 Gzip 格式规范。
- 读取压缩数据:跳过文件头,读取中间的压缩数据部分。
- 哈夫曼解码:对压缩数据进行哈夫曼解码,将变长编码还原为 LZ77 编码后的数据。
- LZ77 解码:对经过哈夫曼解码后的数据进行 LZ77 解码,根据指针和长度信息还原出原始数据。
- 验证校验和:使用文件末尾的校验和验证解压缩后的数据是否完整。
- 输出原始数据:如果校验通过,输出解压缩后的原始数据。
主要参数
压缩级别(-1 到 -9)
- -1:最快压缩,压缩速度最快,但压缩比最低,适合对压缩速度要求高而对压缩比要求不高的场景。
- -9:最佳压缩,压缩比最高,但压缩速度最慢,适合对压缩比要求高而对压缩速度要求不高的场景。
- -6:默认压缩级别,在压缩速度和压缩比之间取得较好的平衡。
递归压缩(-r)
该参数用于递归地压缩指定目录下的所有文件和子目录中的文件。
保留原文件(-k)
默认情况下,Gzip 压缩后会删除原文件。使用 -k
参数可以保留原文件,只生成压缩文件。
显示压缩信息(-v)
使用 -v
参数可以在压缩或解压缩过程中显示详细的压缩信息,如压缩前后的文件大小、压缩比等。
更新日志
2025/8/24 08:17
查看所有更新日志
e7112
-1于