- 为什么要学这个释放资源的方式?
//5 关流outputStream.close();inputStream.close();
原来这种方式,一般项目都会有很多代码,万一前面的代码有异常,就无法执行到这一步,绑定的系统资源就得不到释放,影响系统的性能。这种方案是不合理的
1 try-catch-finally
finally特点
try里面有return也会执行finally
注意:
因为finally先于try的return执行
2 作用:
万一前面已经关闭过流了,finally又关闭一次,也会出现异常,
package com.ruoyi.heima;import java.io.*;
public class StreamTest {public static void main(String[] args) {InputStream inputStream = null;OutputStream outputStream = null;try {File file = new File("C:\\Users\\yan\\Pictures\\4.jpg");//复制照片//1. 创建一个字节输入流管道与源文件接通inputStream = new FileInputStream("C:\\Users\\yan\\Pictures\\4.jpg");//2 创建一个字节输出流与目标文件接通outputStream = new FileOutputStream("C:\\Users\\yan\\Pictures\\4.1.jpg");//创建一个字节数组,负责转移字节数据byte buffer[] = new byte[1024];//从字节输入流中读取字节数据,写到字节输出流中,读多少写出去多少int len;while ((len = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {//5 关流try {if (outputStream != null)outputStream.close();}catch (IOException e){e.printStackTrace();}try {if (inputStream != null)inputStream.close();}catch (IOException e){e.printStackTrace();}}}
}
这种方案虽然代码多,但是专业,安全
2 try-with-resource
jdk7 开始的新方法
为什么要学这个?
代码演示