关闭Java中最外层的流对象
当我这样写的时候:关闭Java中最外层的流对象,java,stream,fileinputstream,Java,Stream,Fileinputstream,当我这样写的时候: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\test.txt"))); br.close(); FileInputStream fis = new FileInputStream("c:\\test.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fis));
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\test.txt")));
br.close();
FileInputStream fis = new FileInputStream("c:\\test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
br.close();
关闭最外面的对象(在本例中为br)也将自动关闭所有链接对象
但是,如果仍然存在对链接对象的引用呢
大概是这样的:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\test.txt")));
br.close();
FileInputStream fis = new FileInputStream("c:\\test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
br.close();
在这种情况下,我不想发布fis,因为我需要很快在另一个流中使用它
在这里调用br的close()是否可以,并且仍然可以使用fis
在这里调用br的close()并仍然可以使用fis可以吗
不强>
一旦br
包装了fis
,fis
就不应用于任何其他目的,因为br
假设fis
是为它服务的,并且只有它才能随心所欲地使用它。例如,它可以在构建过程中预缓冲一些甚至所有的fi
将fis
用于除br
所用以外的任何用途,不仅会产生不可预测的结果,而且很可能会严重干扰br
的功能
即使您所做的只是在创建后立即关闭br
,fis
如果没有完全消耗,那么至少部分消耗是合理的-它也应该关闭
在这里调用br的close()并仍然可以使用fis可以吗
不强>
一旦br
包装了fis
,fis
就不应用于任何其他目的,因为br
假设fis
是为它服务的,并且只有它才能随心所欲地使用它。例如,它可以在构建过程中预缓冲一些甚至所有的fi
将fis
用于除br
所用以外的任何用途,不仅会产生不可预测的结果,而且很可能会严重干扰br
的功能
即使您在创建后立即关闭
br
,fis
如果没有完全消耗,至少部分消耗也是合理的-它也应该关闭。您还需要在其他流中使用它吗?为什么?这就是你的问题所在。当你说“需要在另一条流中使用它”时,你知道流不必支持返回是什么意思吗?@SotiriosDelimanolis是的,你可能是对的。我不记得确切的情况,但好吧,不必像你说的那样。但我想知道在这种情况下会发生什么,因为我还在学习Java,想知道它是如何工作的。@luk2302我并不想粗鲁,但我经常看到这里的人只是说“你为什么要这么做?”而不回答任何问题。。我认为问一些奇怪的问题并没有那么糟糕,如果它能帮助人们更好地理解一些事情的话。这个地方不仅仅是为实用的程序员准备的。我不知道,但不要这样做,因为那不好不是真正的答案。没有冒犯,没有粗鲁,别担心。你还需要在其他的流中使用它吗?为什么?这就是你的问题所在。当你说“需要在另一条流中使用它”时,你知道流不必支持返回是什么意思吗?@SotiriosDelimanolis是的,你可能是对的。我不记得确切的情况,但好吧,不必像你说的那样。但我想知道在这种情况下会发生什么,因为我还在学习Java,想知道它是如何工作的。@luk2302我并不想粗鲁,但我经常看到这里的人只是说“你为什么要这么做?”而不回答任何问题。。我认为问一些奇怪的问题并没有那么糟糕,如果它能帮助人们更好地理解一些事情的话。这个地方不仅仅是为实用的程序员准备的。我不知道,但不要那样做,因为那不是真正的答案。没有冒犯,没有粗鲁,别担心。