当我写这样的东西时:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\test.txt")));
br.close();
关闭最外面的对象,在本例中为 br ,也会自动关闭所有链接对象。
但是如果仍然存在对链式对象的引用呢?
这样的事情:
FileInputStream fis = new FileInputStream("c:\\test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
br.close();
在这种情况下,我不希望发布 fis ,因为我需要尽快在其他流中使用它。
那么可以在这里打电话给 br 的关闭(),还可以使用 fis 吗?
答案 0 :(得分:3)
所以可以在这里打电话给关闭(),还可以使用fis吗?
否!
br
包裹fis
后,fis
不应用于任何其他目的,因为br
已假设fis
适用于此它可以随心所欲地完成它的工作。例如,它可以在构建过程中预先缓冲一些甚至全部fis
等等。
将fis
用于br
使用它之外的任何内容不仅会产生不可预测的结果,而且很可能会显着影响br
的功能。
即使您在创建它之后立即关闭br
,但fis
如果没有完全消耗则至少部分消耗是合理的 - 它也应该被关闭。