"Streaming" compression/decompression 按块

"Streaming" compression/decompression by chunk

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

由于我的代码目前需要读取完整的块以生成输出并且不保留状态,所以我能做的最好的事情就是猜测一个块有多长并希望我到达终点,因为如果我不t,我已经浪费了多个 CPU 周期来阅读 headers、霍夫曼代码,以及 length/literal 和未完成块的距离代码,我将不得不重新做一遍。这似乎是一种糟糕的解决问题的方法,我想知道是否有任何其他方法可以做到这一点,而不涉及重写我的代码以保留状态。

Current decompression code

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