本文介绍了关闭嵌套流也会关闭其父流?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

OutputStream fos;输出流bos;输出流 zos;尝试 {fos = new FileOutputStream(anyFile);bos = 新的 BufferedOutputStream(fos);zos = 新的 ZipOutputStream(bos);} 最后 {如果(佐斯!= null){zos.close();//+ 异常处理}}

关闭 zos 是否也会自动关闭 bosfos,还是我需要手动关闭它们?

解决方案

是的,确实如此.它的 Javadoc 说:>

关闭 ZIP 输出流以及被过滤的流.

此外,BufferedOutputStream 的 Javadoc 说:

关闭此输出流并释放与该流关联的所有系统资源.

FilterOutputStreamclose方法调用其flush方法,然后调用其底层的close方法输出流.

因此,当您关闭 ZipOutputStream 时,它会关闭您的 BufferedOutputStream,进而关闭您的 FileOutputStream.

OutputStream fos;
OutputStream bos;
OutputStream zos;
try {
    fos = new FileOutputStream(anyFile);
    bos = new BufferedOutputStream(fos);
    zos = new ZipOutputStream(bos);
} finally {
    if (zos != null) {
        zos.close(); // + exception handling
    }
}

Does closing zos automatically closes bos and fos too, or do I need to close them manually?

解决方案

Yes, it does. Its Javadoc says:

Also, the Javadoc for BufferedOutputStream says:

So when you close your ZipOutputStream, it will close your BufferedOutputStream, which will in turn close your FileOutputStream.

这篇关于关闭嵌套流也会关闭其父流?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 06:37