答案1
7-Zip 实际上并未显示 Deflate 和 Deflate64 能够处理的所有字长。它仅显示部分样本。Deflate 实际上能够处理 3-258 之间的所有整数增量。由于模式匹配在仅使用 1-2 个变量时不可能或没有用,因此跳过了这些数量。因此,Deflate 的字长跨度实际上是 2 的幂。由于“1”和“2”不是 Deflate 可能的字长选择,因此您需要从最大大小 258 中减去 2,即 256。
至于 Deflate64,它能够处理 3-257 之间的所有整数增量。258 实际上用作扩展标志,以将字长范围从 3 增加到 65538。但是,7-Zip 根本没有使用此功能。无论如何,如果您从 65538 中 -2,您将得到 65536,这也是 2 的幂。然而,有趣的是,如果扩展标志改为覆盖范围 258-65793,Deflate64 可能会得到改进,因为 3-257 已经覆盖了。