在Java 7中,Deflater添加了对某些压缩参数(模式:FULL_FLUSH
,SYNC_FLUSH
)的支持。我猜它们与标准API中的Zlib类似constants相对应(尽管此模式具有更多模式)。
我的疑问是那些模式与DEFLATE流的“块”如何相关(这些块是独立压缩的,除了块内的指针可能指向前一个块的原始子串)。
这些模式中的一个(或两者)是否意味着刷新终止了(非最终的)DEFLATE块?呼叫者可以预测和/或建议这些块边界吗?
具体来说,我想告诉Deflater
对象以下内容:“我将在预定长度的部分(N
)中向您提供M
原始字节,因为我知道这些部分很长且在统计上有所不同,并且因为我知道独立压缩它们几乎没有什么收获和收获,我建议您将它们压缩在单独的DEFLATE块中。”我可以这样做吗?
最佳答案
是的,两次刷新都会在提供输入数据后终止当前块。FULL_FLUSH
进一步防止以下块在其前面的块中使用匹配的字符串。