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()