用Java关闭最外层的流对象

时间:2017-07-28 15:20:50

标签: java stream fileinputstream

当我写这样的东西时:

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 吗?

1 个答案:

答案 0 :(得分:3)

  

所以可以在这里打电话给关闭(),还可以使用fis吗?

否!

br包裹fis后,fis不应用于任何其他目的,因为br已假设fis适用于此它可以随心所欲地完成它的工作。例如,它可以在构建过程中预先缓冲一些甚至全部fis等等。

fis用于br使用它之外的任何内容不仅会产生不可预测的结果,而且很可能会显着影响br的功能。

即使您在创建它之后立即关闭br,但fis如果没有完全消耗则至少部分消耗是合理的 - 它也应该被关闭。