本文目录导读:

网络压缩工具压缩文件的过程,本质上是通过算法来发现并移除文件中的冗余数据,从而减少文件的整体大小,这个过程可以类比为:用更短、更聪明的代码来代表原来的长句子或重复的模式。
主要原理可以分为两大类:无损压缩(压缩后可以完美还原原始文件)和有损压缩(压缩后部分数据被永久舍弃,但人眼/耳可能不易察觉)。
以下是具体的压缩机制和步骤:
核心压缩原理
无损压缩(适用于文档、程序、Zip/RAR文件)
- 查找重复模式: 算法(如LZ77、LZ78)扫描文件,寻找重复出现的字符串(AAAA”或“the”)。
- 创建字典: 它会建立一个“字典”,将重复的模式(如“AAAA”)记录为一个简短的代码(比如代码编号
#1)。 - 替换: 然后将原始文件中所有出现“AAAA”的地方,都替换成代码
#1,因为代码比原始字符串短,所以文件变小了。 - 常见算法:
- DEFLATE(ZIP、gzip 使用):结合了 LZ77(找重复)和霍夫曼编码(给常用字符更短的码)。
- LZMA(7z 使用):更复杂的字典压缩,压缩率更高,但速度稍慢。
有损压缩(适用于图片、音频、视频)
- 丢弃人眼/耳不敏感的信息: 利用人类感知的局限性,移除那些感知不重要的细节。
- 变换编码: 例如JPEG会将图像从“像素颜色值”变换到“频率空间”,然后丢弃高频细节(如微小纹理)。
- 量化: 将大量近似值归为一个值,减少需要存储的信息量。
- 常见算法:
- JPEG(图片):丢弃视觉细节,适合照片。
- MP3(音频):丢弃人耳不敏感的频率(如极低或极高音)。
- H.264/H.265(视频):压缩帧与帧之间的冗余(场景变化小,只存储变化部分)。
压缩文件的具体步骤(以最常用的Zip/RAR为例)
当你用WinRAR、7-Zip或系统自带的“发送到压缩文件夹”时,背后的流程是:
-
分析文件内容:
- 工具读取文件头,判断文件类型(文本、图片、可执行文件等)。
- 针对不同类型,可能选择不同策略(例如文本文件压缩率高,已压缩过的视频文件压缩率低)。
-
选择压缩算法和参数:
- 算法: 用户选择或工具默认(如 Deflate、LZMA、BZip2)。
- 压缩级别: 从“存储”(不压缩,仅打包)到“极限”(花更多时间,获得更小体积)。
- 字典大小: 定义算法能回溯查找重复数据的长度,字典越大,可能找到更多重复,但内存消耗和压缩时间也越大。
-
执行压缩循环(以Deflate为例):
- 步骤A(LZ77): 从文件开头扫描,每当发现一个字符串(如"compress")之前出现过,就用一个指针(指向上次出现的位置和匹配长度)替换它。
the code the code→the code (1,4)(表示从位置1开始,长度为4的字符串)。
- 步骤B(霍夫曼编码): 统计A步骤结果中每个字符或代码的出现频率,给高频字符分配最短的二进制码(比如字母"e"出现多,用
01表示),给低频字符分配更长的二进制码(z"用101110表示)。 - 输出: 最终生成一个二进制的码流(即压缩包的内容),加上用于解压的字典信息。
- 步骤A(LZ77): 从文件开头扫描,每当发现一个字符串(如"compress")之前出现过,就用一个指针(指向上次出现的位置和匹配长度)替换它。
-
打包成存档文件:
- 将压缩后的数据、文件目录、文件名、修改时间、校验和等信息封装成一个单一文件(如
myfile.zip或myfile.7z)。
- 将压缩后的数据、文件目录、文件名、修改时间、校验和等信息封装成一个单一文件(如
压缩后文件发生了什么?
- 已压缩的文件变得“随机”:原始文件(如文本)有明显的模式(英文单词、空格、标点),但压缩后的二进制数据看起来像随机噪声,几乎没有可识别的重复模式。
- 不可再压缩:因为压缩已经移除了所有冗余,对同一个压缩包再压缩一次,体积几乎不会减小,甚至可能略微增大(因为要添加元数据)。
- 需要解压器:解压时,工具反向执行算法——读取字典和代码流,还原成原始数据。
常见的误解与事实
- 可以把任何文件都压缩成极小吗? 不能,熵是物理极限,如果文件已经是高度压缩的(如MP4视频、JPEG图片、已压缩过的PDF),再压缩只能获得很小的体积(甚至负收益)。
- 压缩比和速度成反比: 越复杂、越耗时的算法(如LZMA)通常压缩比更高;快速的算法(如Deflate)压缩比稍低,但压缩和解压速度非常快。
- 文件夹不能直接压缩: 文件夹本身是逻辑容器,压缩工具实际上是把文件夹内所有文件及其路径信息打包成一个压缩包,所以单位时间内能压缩的文件数量受限于IO和CPU。
一句话总结: 网络压缩工具通过发现并去除数据中的冗余(如重复字符串、不敏感细节),用更简短的代码表示原始数据,从而实现文件体积缩小。
标签: 压缩算法
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播