《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()//是这种方法好,还是上述方法好,还有关闭一个流时的这个顺序对吗? 

解决方案 »

  1.   

    这个也就不清楚了,你可以先创建个FileReader实例
      

  2.   

    其实在调用
    BufferedReader in = new BufferedReader (new FileReader (file.getPath())); in.clse ()//这里已经调用了FileReader 的close()方法,所以你不用担心里面流的处理,BufferedReader 的close方法就是关闭里面那个FileReader 的流下面你说的那种方法是不必要的,只要调用
    br.close()就可以了给你源码看吧
        
    // BufferedReader 的close方法,也就是关闭FileReader 的流
    public void close() throws IOException {
    synchronized (lock) {
        if (in == null)
    return;
        in.close();
        in = null;
        cb = null;
    }
        }
      

  3.   

    执行br.close() 时会调用fr.close() 一般来说直接调用br.close()就可以了
      

  4.   

    BufferedReader 执行close会将 “提供者流”也关闭的 不需要去关心