这是一个示例代码

ByteArrayOutputStream baos = new ByteArrayOutputStream(bufSize);
GZIPOutputStream gzos = new GZIPOutputStream1(baos);
gzos.write(...)
...
gzos.write(...)
...
// Would the content get flushed properly?
gzos.flush()
byte[] bytes =  baos.toByteArray();
// Use bytes wherever you want
...
// Would this reset things for gzos?
baos.reset()
gzos.write(...)
...
gzos.write(...)
...
bytes =  baos.toByteArray();
...


因此,一旦在某个地方使用了压缩字节数组,我想重置该流。我有两个问题。我在某处读到GZIPOutputStream的flush方法不一定总是刷新内容? Java 7是否仍然适用?如果可行,调用ByteArrayOutputStream对象的reset是否足以重置GZIPOutputStream对象的东西?

最佳答案

我在某处读到GZIPOutputStream的flush方法不一定总是刷新内容?


这取决于您使用的GZIPOutputStream构造函数。如果创建将true传递给boolean syncFlush的压缩器,则任何flush()调用将分别刷新压缩器和输出流。如果false,则仅输出strem会刷新。


  Java 7是否仍然适用?


您描述的行为是在Java 6中发生的。此syncFlush参数自Java 7起可用。它在Java 8中是可用的。


  如果可行,调用ByteArrayOutputStream对象的reset是否足以重置GZIPOutputStream对象的东西?


是的,看来是这样。

09-25 20:16