以前使用多重流的嵌套时,总是习惯性的从里到外,依次关闭每一个流。
今天才知道,时多此一举,只需要关闭最外层的口=流就行了。
比如:
FileWriter fileWritter1 = new FileWriter(outfile1);
BufferedWriter bw1 = new BufferedWriter(fileWritter1);
关闭时只需要关闭fileWritter就可以了:
fileWritter1.close();
原因在BufferedWriter 的源代码中,这是BufferedWriter 的close()方法源码:
然而这个out对象是一个Writer:
这个Writer正是BufferedWriter 构造参数中传入的Writer,即本例中的FileWriter 。所以关闭BufferedWriter 时,
其实什么都没有做,仅仅是简单的调用了FileWriter 的close()方法。而且BufferedWriter 的close()方法也是一个
synchronized方法。也会引起多线程情况下的效率问题。所以多层流嵌套时,只需要关闭最外层的流即可。
多重流正确关闭方式
本文解释了在使用Java中多重流(如FileWriter与BufferedWriter)时正确的关闭顺序。指出只需关闭最外层流即可,内部流会自动被关闭。通过分析BufferedWriter的close方法源码说明原因。
653

被折叠的 条评论
为什么被折叠?



