这是一个示例代码
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
对象的东西?
是的,看来是这样。