《Java2核心技术第1卷》p573:当完成了对一个流的读取或者写入后,就应该调用close方法将它关闭,这样可以释放流所占用的操作系统资源。
问题:当我使用下述方法打开流时?
BufferedReader in = new BufferedReader (new FileReader (file.getPath()));
in.clse ()//在此关闭流,那么匿名的FileReader对向是否也自动调用了close()方法?还是直接交给了垃圾回收器去处理了?
FileReader fr = new FileReader (file.getPath());
BufferedReader br = new BufferedReader(fr);
fr.close()
br.close()//是这种方法好,还是上述方法好,还有关闭一个流时的这个顺序对吗?
------解决方案--------------------
其实在调用
BufferedReader in = new BufferedReader (new FileReader (file.getPath()));
in.clse ()//这里已经调用了FileReader 的close()方法,所以你不用担心里面流的处理,BufferedReader 的close方法就是关闭里面那个FileReader 的流
下面你说的那种方法是不必要的,只要调用
br.close()就可以了
给你源码看吧
- Java code
// BufferedReader 的close方法,也就是关闭FileReader 的流public void close() throws IOException { synchronized (lock) { if (in == null) return; in.close(); in = null; cb = null; } }