Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关闭Java中最外层的流对象_Java_Stream_Fileinputstream - Fatal编程技术网

关闭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,因为我需要很快在另一个流中使用它

在这里调用brclose()是否可以,并且仍然可以使用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我并不想粗鲁,但我经常看到这里的人只是说“你为什么要这么做?”而不回答任何问题。。我认为问一些奇怪的问题并没有那么糟糕,如果它能帮助人们更好地理解一些事情的话。这个地方不仅仅是为实用的程序员准备的。我不知道,但不要那样做,因为那不是真正的答案。没有冒犯,没有粗鲁,别担心。