【问题标题】:Is it safe to flush a GZIPOutputStream followed by a ByteArrayOutputStream reset?刷新 GZIPOutputStream 后刷新 ByteArrayOutputStream 是否安全?
【发布时间】:2017-10-04 03:30:29
【问题描述】:

这是一个示例代码

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 对象的内容?

【问题讨论】:

    标签: java gzip java-7 flush


    【解决方案1】:

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

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

    Java 7 仍然如此吗?

    您描述的行为发生在 Java 6 中。这个 syncFlush 参数从 Java 7 开始可用。当然,它在 Java 8 中。

    如果可行,调用 ByteArrayOutputStream 对象的重置是否足以重置 GZIPOutputStream 对象的内容?

    是的,看起来是这样。

    【讨论】:

    • 非常有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 2012-09-05
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2021-05-14
    • 1970-01-01
    相关资源
    最近更新 更多