Java Deflater中的SYNC_FLUSH / FULL_FLUSH参数与DEFLATE块有什么关系?

3
在Java 7中,Deflater增加了对一些压缩参数的支持(模式:FULL_FLUSHSYNC_FLUSH)。我猜想它们对应于标准API中Zlib相似的常量(尽管这个有更多的模式)。
我的疑问是这些模式与DEFLATE流的“块”如何相关联(这些块独立压缩,但块内的指针可能指向前一块的原始子字符串)。
这些模式中的一个(或两个)是否意味着刷新终止(非最终)DEFLATE块?调用者能否预测和/或建议这些块边界?

具体来说,我希望告诉Deflater对象以下内容:“我将以预定长度(M)的部分方式提供给您N个原始字节,并且因为我知道这些部分非常长而且统计数据不同,因为我知道在独立压缩它们方面很少有损失而有所收获,所以我建议你将它们分别压缩成独立的DEFLATE块。” 我可以这样做吗?

1个回答

5

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

FULL_FLUSH 还防止后面的块使用前面块中匹配的字符串。


1
谢谢。我在想...考虑到FULL_FLUSH非常类似于连接多个zlib流...连接两个ZLIB流是否容易/微不足道?我认为这相当于解析块以将一个最终标志更改为非最终标志,再重新计算Adler [your]校验和...我是对的吗? - leonbloy
1
已经在这里回答过了(由你):https://dev59.com/Nm7Xa4cB1Zd3GeqPmyxY ,忘了吧。 - leonbloy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接