压缩算法
文本类
Gzip 基于 DEFLATE 算法(重复序列),它是 LZ77 和霍夫曼编码(前缀编码)的组合。 压缩率:60%,处理较慢
Brotli 有着更高的压缩效率。它通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩。 压缩率:70%,处理更快
流式压缩,对输入的数据流实时压缩和输出,常用于网络传输。该算法采用滑动窗口,将输入的数据流按照固定大小的窗口进行划分,并对每个窗口进行压缩。在压缩的过程中,每个窗口都可以独立进行压缩,不需要等待其他窗口的压缩完成。
霍夫曼
Huffman Coding
前缀编码
LZ77
滑动窗口 (distance, length)
Huffman 编码是将出现次数多的编码尽可能的短来进行压缩,而 LZ77 则是另外一种思路:替换重复的内容。
DEFLATE/ZIP
在一个文件中,如果有内容是相同的话,就可以在后一块内容中做一个标记,标示和前一块的距离和相同的长度(distance,length)。(distance,length)绝大多数情况下小于重复的内容,因此文件的体积就变小了。
ZIP 中,首先使用 LZ77 编码进行压缩,然后之后再对 LZ77 编码之后的结果继续进行压缩(Huffman 编码),这个算法也叫做 Deflate 算法。