根据DEFLATE 规范:
- 压缩表示概述
压缩数据集由一系列块组成,对应于输入数据的连续块。块大小是任意的,但不可压缩块限制为 65,535 字节。
每个块都使用 LZ77 算法和 Huffman 编码的组合进行压缩。每个块的霍夫曼树独立于前一个或后一个块的霍夫曼树;LZ77 算法可以使用对出现在前一个块中的重复字符串的引用,之前最多 32K 输入字节。
每个块由两部分组成:一对描述压缩数据部分表示的霍夫曼代码树,以及一个压缩数据部分。(霍夫曼树本身是使用霍夫曼编码压缩的。)压缩数据由两种类型的一系列元素组成:文字字节(在之前的 32K 输入字节中未被检测为重复的字符串)和指向重复字符串的指针,其中指针表示为一对<长度,向后距离>。“deflate”格式中使用的表示将距离限制为 32K 字节,长度限制为 258 字节,但不限制块的大小,但不可压缩块除外,如上所述受到限制。
所以指向重复字符串的指针只能返回 32 KiB,但由于块大小不受限制,Huffman 代码树是否可以将两个超过 32 KiB 的重复字符串存储为相同的代码?那么限制因素是块大小吗?