美文网首页
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