了解内容
什么是文件压缩?
文件压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率,或者按照一定的算法对数据进行重新组织,减少数据的冗余和存储空间的一种技术方法。
为什么需要文件压缩?
- 紧缩数据存储容量,减少存储空间
- 可以提高数据传输的速度,减少宽带占用量,提高通讯效率
- 对数据的一种加密保护,增强数据在传输过程中的安全性
文件压缩的分类有哪些?
1、有损压缩
有损压缩是利用了人类对图像或声波中的某些频率成分不敏感的特性,允许压缩过程中损失一定的信息;虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响缩小,却换来了大得多的压缩比率,即指使用压缩后的数据进行重构,重构后的数据与原来的数据有所不同,但不影响人对原始资料表达的信息造成误解。例如:不同清晰度的视频文件。
2、无损压缩
对文件中数据按照特定的编码格式进行重新组织,压缩后的压缩文件可以被还原成与源文件完全相同的格式,不会影响文件内容,对于数码图像而言,不会使图像细节有任何损失。
注:本项目是采取无损压缩方式
重点来了
怎么压缩?
项目叫基于GZIP思想的文件压缩,那什么是GZIP思想呢?
GZIP压缩算法经历了两个阶段
第一个阶段是使用改进的LZ77压缩算法对文件中的重复语句进行压缩
(想了解LZ77算法由来的戳这里)---->LZ77算法的由来和背景
第二阶段采用Huffman编码思想来对第一阶段压缩完成的数据进行字节上的压缩,从而实现数据的高效压缩存储。
(想了解Huffman算法由来的戳这里)---->Huffman算法的由来和背景
接下来我将从LZ77压缩算法和Huffman压缩算法两个方面进行分析。
一、LZ77压缩算法
1、什么是LZ77压缩算法?
LZ77是一种基于字典的算法,它将长字符串(也称为短语)编码成短小的标记,用小标记代替字典中的短语,从而达到压缩的目的。
例如:源文件内容:mnoabczxyuvwabc123456abczxydefgh
LZ77使用的是一个前向缓冲区和一个滑动窗口来维护字典。它首先将一部分数据载入前向缓冲区,一旦数据中 的短语通过前向缓冲区,那么它将移动到滑动窗口中,并变成字典的一部分,随着滑动窗口的移动,字典中 的内容也在不断的更新,也就是说它是变更新字典,边进行压缩。
假设字典已经建立,每读到一个字符,就向前扫描,在字典中查看是否有重复出现的短语,若搜索出有重复 出现的短语,将其编码成短语标记。短语标记由三部分组成:滑动窗口中的偏移量(从头部到匹配开始的前 一个字符)、匹配中的符号个数、匹配结束后,前向缓冲区中的第一个符号---(offset, lenght