以前使用多重流的嵌套时,总是习惯性的从里到外,依次关闭每一个流。
今天才知道,时多此一举,只需要关闭最外层的口=流就行了。
比如:
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方法。也会引起多线程情况下的效率问题。所以多层流嵌套时,只需要关闭最外层的流即可。