我们正在开发一个程序,需要刷新(强制压缩和发送数据)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-argument或the four-argument GZIPOutputStream
constructor,然后将true
传递给syncFlush
参数。这将激活您想要的冲洗行为。