DEFLATE 算法的内存使用情况

问题描述

DEFLATE 算法的许多实现允许基于流的输入。一个例子是 Java 的 // Between 10:00:00 and 11:59:59 db.collection.aggregate([ { $set: { parts: { $datetoParts: { date: "$delivery_slot_date" } } } },{ $match: { "parts.hour": { $gte: 10,$lt: 12 } } },]) // Between 10:10:00 and 10:29:59 db.collection.aggregate([ { $set: { parts: { $datetoParts: { date: "$delivery_slot_date" } } } },{ $match: { "parts.hour": 10,"parts.minute": { $gte: 10,$lt: 30 } } } ]) 。据我所知,DEFLATE 在压缩之前构建了一个霍夫曼树,并在 .zip 文件的开始处写入这棵树。

然而,为了构建霍夫曼树,程序需要最常出现的字符的计数,只有在读取文件后才能获得。如果流太大以至于无法一次放入内存,那么如何构建霍夫曼树?

解决方法

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

格式在RFC 1951

中指定