DEFLATE 算法的内存使用情况

Memory usage by DEFLATE algorithm

DEFLATE 算法的许多实现都允许基于流的输入。一个例子是 Java 的 java.util.zip.ZipOutputStream。据我所知,DEFLATE 在压缩之前构建了一个霍夫曼树,并在 .zip 文件的开头写入了这棵树。

但是,为了构建霍夫曼树,程序需要对最常出现的字符进行计数,而只有在读取文件后才具有这些字符。如果流很大,内存一下子装不下,哈夫曼树是怎么建的?

DEFLATE 以块为单位压缩数据。每个块都包含自己的 tree/counts,未压缩时通常约为 16KB。

格式在RFC 1951

中指定