我们正在开发一个程序,需要刷新(强制压缩和发送数据)GZIPOutputStream。问题在于,GZIPOutputStream的flush方法无法按预期工作(强制压缩并发送数据),而是Stream等待更多数据以进行有效的数据压缩。

调用完成后,数据将被压缩并通过输出流发送,但是GZIPOutputStream(而不是基础流)将被关闭,因此在创建新的GZIPOutputStream之前,我们无法写入更多数据,这会浪费时间和性能。

希望任何人都可以提供帮助。

最好的祝福。

最佳答案

我还没有尝试过,并且该建议在我们拥有Java 7之前不会有用,但是GZIPOutputStream flush() 方法的文档是从DeflaterOutputStream继承的,它依赖于在构造时使用the syncFlush argument指定的刷新模式(与Deflater#SYNC_FLUSH)决定是否刷新待压缩的待压缩数据。构造时,syncFlush也接受此GZIPOutputStream参数。

听起来您想使用 Deflator#SYNC_FLUSH 甚至是 Deflater#FULL_FLUSH ,但是在深入探讨之前,请先尝试使用the two-argumentthe four-argument GZIPOutputStream constructor,然后将true传递给syncFlush参数。这将激活您想要的冲洗行为。

08-29 00:20