Java Deflater 中的 SYNC_FLUSH/FULL_FLUSH 参数:与 DEFLATE 块的关系?

leo*_*loy 3 java zlib deflate

在 Java 7 中,Deflater添加了对一些压缩参数(模式:FULL_FLUSH, SYNC_FLUSH)的支持。我猜它们对应于标准 API 中的Zlib 类似常量(尽管这个有更多模式)。

我的疑问是这些模式如何与 DEFLATE 流的“块”相关(这些块是独立压缩的,除了块内的指针可能指向前一个块的原始子字符串)。

这些模式中的一种(或两种)是否意味着刷新终止(非最终)DEFLATE 块?调用者可以预测和/或建议这些块边界吗?

具体来说,我想告诉Deflater对象以下内容:“我将以N预定长度 ( M) 的部分为您提供原始字节,并且因为我知道这些部分很长并且在统计上是不同的,并且因为我知道有在独立压缩它们时几乎没有松动和获得一些好处,我建议您将它们压缩在单独的 DEFLATE 块中”。我可以这样做吗?

Mar*_*ler 5

是的,两次刷新都会在提供的输入数据之后终止当前块。

FULL_FLUSH 进一步防止后面的块在它之前的块中使用匹配的字符串。