什么时候形成一个新的 DEFLATE 块?

When to form a new DEFLATE block?

使用DEFLATE将文件或目录压缩成zip文件时,什么时候应该形成一个新的DEFLATE块?再者,由于DEFLATE最大码长是15位,所以每当哈夫曼树的深度超过15时,是否应该形成一个新的块?谢谢!

  1. 只要你喜欢,但不要太频繁。
  2. 没有。你可以压扁哈夫曼树。
一旦生成了选定数量的文字 + length/distance 对,

zlib 就会发出一个放气块。默认情况下,该数字为 16383。它可以作为内存使用选项的一部分进行更改。最后,最后一个块还有剩下的东西。

zopfli 试图通过制作大块并在压缩率上升时拆分它们来变得更智能,在下一次拆分会使压缩率下降时停止。

您不希望放气块太小,因为描述块中使用的代码的动态 header 的大小将成为大小的重要因素,从而降低压缩率。您不希望块太大,因为在块期间固定的代码将无法适应被压缩数据的局部统计变化。

至于最大深度,zlib 和其他 deflators 会很乐意通过正常的 Huffman 算法制作代码深度大于 15 的块。然后他们将压缩代码以使深度为 15。