java如何利用try-with-resource更好地关闭io流
分类: Java 标签: try-with-resource 关闭io流
2021-01-01 23:56:53 967浏览
java如何利用try-with-resource更好地关闭io流
今天给大家分享的是java如何更好地关闭io流
前言:JAVA得一大特性就是JVM会对内部资源实现自动回收,即自动GC,给开发者带来了极大得便利。但是JVM对外部资源得引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。
传统得手动释放外部资源一般放在一般放在try{}catch(){}finally{}机制得finally代码块中,因为finally代码块中语句是肯定会被执行得,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异常,finally代码块中也有一个try{}catch(){},这种写法是经典得传统释放外部资源方法,显然是非常繁琐得。
传统写法操作io流
例如如下读取得文件得io流,我们之前可能会这样写
借助idea查看编译后得代码
可以看到编译后得代码,java编译器自动替我们加上了关闭流得操作。所以跟我们自己关闭流是一样得。try-with-resource这样优雅得写法还是不错得,让代码看起来不那么臃肿。
注意jdk1.7以后才可以用.
行,今天就给大家分享到这里吧,您的一份支持就是我最大的动力,最后打个小广告,我们程序员在学习和工作中或多或少会遇到一些比较棘手的问题,也就所谓的一时半会解决不了的bug,可以来杰凡IT问答平台上提问,平台上大佬很多可以快速给你一对一解决问题,有需要的朋友可以去关注下,平台网址: https://www.jf3q.com
前言:JAVA得一大特性就是JVM会对内部资源实现自动回收,即自动GC,给开发者带来了极大得便利。但是JVM对外部资源得引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。
传统得手动释放外部资源一般放在一般放在try{}catch(){}finally{}机制得finally代码块中,因为finally代码块中语句是肯定会被执行得,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异常,finally代码块中也有一个try{}catch(){},这种写法是经典得传统释放外部资源方法,显然是非常繁琐得。
传统写法操作io流
例如如下读取得文件得io流,我们之前可能会这样写
public class Main {使用try-with-resource写法优雅操作io流
public static void main(String[] args) {
FileInputStream fileInputStream =null;
try {
fileInputStream = new FileInputStream(new File("/Users/laoniu/a.txt")); //打开流
byte[] bytes = new byte[1024];
int line = 0;
//读取数据
while ((line = fileInputStream.read(bytes))!= -1){
System.out.println(new String(bytes,0,line));
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fileInputStream != null){ //不为空
try {
fileInputStream.close(); //关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public class Main {在try()中可以编写多个文件io流或网络io流。让我们看看java编译器是怎么帮我们实现得
public static void main(String[] args) {
//把打开流得操作都放入try()块里
try( FileInputStream fileInputStream = new FileInputStream(new File("/Users/laoniu/a.txt"))) {
byte[] bytes = new byte[1024];
int line = 0;
while ((line = fileInputStream.read(bytes))!= -1){
System.out.println(new String(bytes,0,line));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
借助idea查看编译后得代码
可以看到编译后得代码,java编译器自动替我们加上了关闭流得操作。所以跟我们自己关闭流是一样得。try-with-resource这样优雅得写法还是不错得,让代码看起来不那么臃肿。
注意jdk1.7以后才可以用.
行,今天就给大家分享到这里吧,您的一份支持就是我最大的动力,最后打个小广告,我们程序员在学习和工作中或多或少会遇到一些比较棘手的问题,也就所谓的一时半会解决不了的bug,可以来杰凡IT问答平台上提问,平台上大佬很多可以快速给你一对一解决问题,有需要的朋友可以去关注下,平台网址: https://www.jf3q.com
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
暂无评论,快来写一下吧
展开评论
他的专栏
他感兴趣的技术