2017-05-05 23 views
1

下面是一个例子代码刷新GZIPOutputStream和ByteArrayOutputStream复位是否安全?

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的冲洗方法不一定总是冲洗内容?对于Java 7,这仍然是真的吗?如果这样的话,正在调用ByteArrayOutputStream对象的重置足以重置GZIPOutputStream对象的东西?

回答

1

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

这取决于你使用什么GZIPOutputStream构造函数。如果您创建的压缩机通过trueboolean syncFlush,则任何flush()调用将分别刷新压缩机和输出流。如果false,只有输出strem会刷新。

这对Java 7来说还是真的吗?

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

如果有效,是否调用ByteArrayOutputStream对象的重置足以重置对象GZIPOutputStream的东西?

是的,似乎是这样。

+0

非常有帮助。谢谢! – pythonic

相关问题