Java IO - 关闭输入流

时间:2012-10-12 20:16:58

标签: java java-io

如果

FileInputStream fileIS = new FileInputStream(filePathStr);
DataInputStream dataIS = new DataInputStream(fileIS);

关闭文件是否会自动关闭数据IS ,因为日期是传播fileIS还是dataIS也应该单独关闭?

由于

4 个答案:

答案 0 :(得分:7)

如果给出选择,则应仅关闭DataInputStream。更一般地,始终关闭最外层的包装流。结束将向内传播,这是通常确保正确行为的唯一方法。

但是,如果您关闭基础FileInputStream,那也就足够了,因为DataInputStream本身并不获取任何系统资源。

您问题的最直接答案:不,关闭基础流不会关闭包装器流,但实际上从系统资源泄漏的角度来看这是无关紧要的。只有底部的流耦合到实际的系统资源。

答案 1 :(得分:2)

应该做相反的事情。由于DataInputStream包装了FileInputStream,您应该关闭它,这也会关闭FileInputStream。

答案 2 :(得分:2)

实现将关闭内部流。关闭最外面的流,否则你可能会遇到问题,例如使用例如BufferedOutputStream并首先关闭OutputStream - 缓冲区中剩余的数据无法写入并丢失!

答案 3 :(得分:0)

DataInputStream扩展了FilterInputStream,并且本身并不实现close(),因此它是继承的。您询问的行为是在FilterInputStream.close()的合同中明确指定的,DataInputStream因此必须遵守,而FilterInputStream的所有其他派生类也必须遵守。类似地,对于FilterOutputStream,FilterReader和FilterWriter的派生类。