按块进行“流式”压缩/解压缩

问题描述

我正在使用JavaScript压缩库。我已经创建了一个相对较快的DEFLATE压缩器和解压缩器,但是它们要求在使用之前将数据完全加载到内存中。我认为增加对压缩的流式支持应该不会太困难;我可以将任何可用数据压缩到一组完整的块中,将结果附加到输出流中,并避免设置BFINAL标记,直到最后一个块通过为止。但是,减压流会出现问题。

由于我的代码当前需要读取一个完整的块以生成输出并且不保留状态,所以我能做的最好的就是猜测一个块有多长时间,并希望我可以达到终点,因为如果我不这样做,我浪费了多个cpu周期来读取未完成块的标题,霍夫曼代码以及长度/文字和距离代码,而我将不得不重新做一遍。这似乎是解决问题的一种糟糕方法,我想知道是否还有其他方法可以实现,而无需重写我的代码来保存状态。

Current decompression code

解决方法

不是,您需要保留状态。或者准备将整个流读入内存。没有什么能阻止放气流由单个长的放气块组成。