try-with-resource如何优雅的关闭io流[通俗易懂]

try-with-resource如何优雅的关闭io流[通俗易懂]JAVA的一大特性就是JVM会对内部资源实现自动回收,即自动GC,给开发者带来了极大的便利。但是JVM对外部资源的引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等,这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等。传统的手动释放外部资源一般放在一般放在try{}catch(){}finally{}机制的finally代码块中,因为finally代码块中语句是肯定会被执行的,即保证了外部资源最后一定会被释放。同时考虑到finally代码块中也有可能出现异

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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查看编译后的代码

try-with-resource如何优雅的关闭io流[通俗易懂]

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

注意jdk1.7以后才可以用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184253.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pytest(6)重复运行用例pytest-repeat「建议收藏」

    Pytest(6)重复运行用例pytest-repeat「建议收藏」前言平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来。自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,

    2022年7月30日
  • idea2021.7.20激活码获取【2021.7最新】

    (idea2021.7.20激活码获取)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月20日
  • Nginx-代理apache负载均衡

    Nginx-代理apache负载均衡一、什么是负载均衡        当一台服务器单位时间访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就容会崩掉。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。        我们可以建立多个服务器,组成一个服务器集群,当用户访问网站时,先访问中间服务器,再让这个中间服务器在服务器集群中选择一个压力

    2022年9月8日
  • smtp.gmail.com_aspnet网站

    smtp.gmail.com_aspnet网站//ASP.NET与GMail免费SMTP服务器//usingSystem.Net.Mail;MailMessagemessage=newMailMessage();message.From=newMailAddress(“User@gmail.com”);//…newMailAddress(“User@gmail.com”,”显示的名字”);me

    2022年9月26日
  • 数据的水平分割

    数据的水平分割

    2021年12月14日
  • VS2010旗舰版下载

    VS2010旗舰版下载下面这个可用下载:大小2.5Ghttp://download.microsoft.com/download/E/0/4/E0427BB8-8490-4C7F-A05B-AFEA0FC3EA80/X16-60997VS2010UltimTrialCHS.iso//下面没怎么管MicrosoftVisualStudio2010旗舰版(vs2010…

    2022年7月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号