java如何利用try-with-resource更好地关闭io流

java如何利用try-with-resource更好地关闭io流-飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

2021-01-01 23:56:53   241浏览 分类: Java

今天给大家分享的是java如何更好地关闭io流
前言:JAVA得一大特性就是JVM会对内部资源实现自动回收,即自动GC,给开发者带来了极大得便利。但是JVM对外部资源得引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。

传统得手动释放外部资源一般放在一般放在try{}catch(){}finally{}机制得finally代码块中,因为finally代码块中语句是肯定会被执行得,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异常,finally代码块中也有一个try{}catch(){},这种写法是经典得传统释放外部资源方法,显然是非常繁琐得。

传统写法操作io流
例如如下读取得文件得io流,我们之前可能会这样写
public class Main {
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();
}
}
}
}
}
使用try-with-resource写法优雅操作io流
public class Main {
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();
}
}
}
在try()中可以编写多个文件io流或网络io流。让我们看看java编译器是怎么帮我们实现得
借助idea查看编译后得代码

可以看到编译后得代码,java编译器自动替我们加上了关闭流得操作。所以跟我们自己关闭流是一样得。try-with-resource这样优雅得写法还是不错得,让代码看起来不那么臃肿。

注意jdk1.7以后才可以用.
行,今天就给大家分享到这里吧,您的一份支持就是我最大的动力,最后打个小广告,我们程序员在学习和工作中或多或少会遇到一些比较棘手的问题,也就所谓的一时半会解决不了的bug,可以来杰凡IT问答平台上提问,平台上大佬很多可以快速给你一对一解决问题,有需要的朋友可以去关注下,平台网址: https://www.jf3q.com

好文章就要一起分享哦!分享海报

此处可发布评论

评论(0

暂无评论,快来写一下吧
客服QQ 1913284695