我正在编写一个压缩库作为一个小的副业项目,目前已经完成了一定进展(我的库可以提取任何标准gzip文件,并生成符合规范(但肯定不是最优)的gzip输出),现在是时候想出一个有意义的块终止策略了。目前,我只是在每32k输入(LZ77窗口大小)后截断块,因为这样做方便且实现迅速 - 现在我正在回头尝试实际提高压缩效率。
关于此,Deflate规范只有这么说:“当压缩器确定使用新的树开始新块或者块大小填满压缩器的块缓冲区时,它会终止一个块”,这并没有什么帮助。
我研究了SharpZipLib代码(因为我认为它是最易于阅读的开源实现),发现它忽略输入,每16k输出文字时终止一个块。这很容易实现,但似乎必须有一些更针对性的方法,特别是考虑到规范中的语言“确定使用新的树开始新块是否有用”。
那么,有人有新策略的想法或现有策略的例子吗?
提前感谢!
关于此,Deflate规范只有这么说:“当压缩器确定使用新的树开始新块或者块大小填满压缩器的块缓冲区时,它会终止一个块”,这并没有什么帮助。
我研究了SharpZipLib代码(因为我认为它是最易于阅读的开源实现),发现它忽略输入,每16k输出文字时终止一个块。这很容易实现,但似乎必须有一些更针对性的方法,特别是考虑到规范中的语言“确定使用新的树开始新块是否有用”。
那么,有人有新策略的想法或现有策略的例子吗?
提前感谢!