美文网首页
Java 非托管资源开发分享

Java 非托管资源开发分享

作者: weaponxx | 来源:发表于2023-06-20 09:47 被阅读0次

    Java 非托管资源开发分享

    问题背景

    对于非托管资源(文件读写,数据库连接,网络连接)开发的时候都是需要手工调用close接口进行资源的释放.
    开发时需要特别注意,异常处理时需要在finally里对资源进行关闭,要不然很容易出现资源泄漏.以下是推荐写法.

    try-with-resources

    Java 7开始引入了try-with-resources语句,可以在代码块结束时自动关闭资源。以下是2中写法对比,try-with-resources明显要简单.

    //try-with-resources写法
    try (FileInputStream fis = new FileInputStream("file.txt")) {
        // 处理文件
    }catch (IOException e) {
        // 处理异常
    }
    
    //原始写法
    FileInputStream fis ;
    try  {
        fis = new FileInputStream("file.txt");
        // 处理文件
    }catch (IOException e) {
        // 处理异常
    }finally{
        if(fis != null){
            fis.close();
        }
    }
    
    

    如果需要打开多个资源,可以用;分隔多个资源,在try()中,我们可以实例化任意数量的实现了AutoCloseable接口的对象,代码块执行完毕或者抛出异常后,这些资源会自动被关闭,无需显式调用close()方法。

    try (FileInputStream fis = new FileInputStream("file.txt");
         InputStreamReader isr = new InputStreamReader(fis);
         BufferedReader br = new BufferedReader(isr)) {
    // 使用BufferedReader读取文件内容
    }catch (IOException e) {
        // 处理异常
    }
    

    AutoCloseable接口

    我们有给Spring管理的非托管资源或者我们自己封装了一个非托管资源,这个时候我们的对象需要继承AutoCloseable接口.
    AutoCloseable是Java标准库中有一个接口,该接口定义了一种在使用完资源后自动关闭资源的方式。
    继承AutoCloseable接口的类需要实现close()方法,在该方法中释放资源。
    继承AutoCloseable类如果托管给Spring,Spring会调用close()方法,实现资源的释放.
    继承AutoCloseable类直接开发的类也能使用try-with-resources写法.

    相关文章

      网友评论

          本文标题:Java 非托管资源开发分享

          本文链接:https://www.haomeiwen.com/subject/bdeyydtx.html