Java的IO操作之关闭流

我们知道,当结束对一个流的操作时,需要调用流的close()方法对其进行释放,这将释放掉与这个流有关的所有资源,包括文件句柄、端口等。如果不关闭流,垃圾回收机制将无法识别你是否已使用完这个文件,读取的文件会占用内存无法释放,造成内存泄露。

在Java 6和之前版本,常用的做法是在finally模块中关闭流,如下:

OutputStream out=null;
try{
    out = new FileOutputSteam("/data.txt");
    //流的处理
}catch(IOException ex){
    System.err.println(ex.getMessage());
}finally{
    if(out!=null){
        try{
            out.close();
        }catch(IOException e){
            // 记录
        }
    }
}

这种方式叫做“释放模式”。

而到了Java 7,提供了一种更简便的实现方法:

try(OutputStream out=new OutputSteam("data.txt")){
    //流的处理
}catch(IOException ex){
    System.err.println(ex.getMessage());
}

这种方法不需Finally块,Java会对try块参数表中声明了AutoCloseable对象自动调用close()

posted on 2017-05-05 01:20  西楼有酒  阅读(592)  评论(0编辑  收藏  举报

导航