欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

try-with-resource優(yōu)雅關(guān)閉io流的方法

 更新時(shí)間:2021年01月04日 15:19:16   作者:Java勸退師、  
這篇文章主要給大家介紹了關(guān)于try-with-resource優(yōu)雅關(guān)閉io流的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

JAVA的一大特性就是JVM會(huì)對內(nèi)部資源實(shí)現(xiàn)自動(dòng)回收,即自動(dòng)GC,給開發(fā)者帶來了極大的便利。但是JVM對外部資源的引用卻無法自動(dòng)回收,例如數(shù)據(jù)庫連接,網(wǎng)絡(luò)連接以及輸入輸出IO流等,這些連接就需要我們手動(dòng)去關(guān)閉,不然會(huì)導(dǎo)致外部資源泄露,連接池溢出以及文件被異常占用等。

傳統(tǒng)的手動(dòng)釋放外部資源一般放在一般放在try{}catch(){}finally{}機(jī)制的finally代碼塊中,因?yàn)閒inally代碼塊中語句是肯定會(huì)被執(zhí)行的,即保證了外部資源最后一定會(huì)被釋放。同時(shí)考慮到finally代碼塊中也有可能出現(xiàn)異常,finally代碼塊中也有一個(gè)try{}catch(){},這種寫法是經(jīng)典的傳統(tǒng)釋放外部資源方法,顯然是非常繁瑣的。

傳統(tǒng)寫法操作io流

例如如下讀取的文件的io流,我們之前可能會(huì)這樣寫

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; 
   //讀取數(shù)據(jù)
   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(); //關(guān)閉流
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 }
}

使用try-with-resource寫法優(yōu)雅操作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()中可以編寫多個(gè)文件io流或網(wǎng)絡(luò)io流。讓我們看看java編譯器是怎么幫我們實(shí)現(xiàn)的

借助idea查看編譯后的代碼

可以看到編譯后的代碼,java編譯器自動(dòng)替我們加上了關(guān)閉流的操作。所以跟我們自己關(guān)閉流是一樣的。try-with-resource這樣優(yōu)雅的寫法還是不錯(cuò)的,讓代碼看起來不那么臃腫。

注意jdk1.7以后才可以用

總結(jié)

到此這篇關(guān)于try-with-resource優(yōu)雅關(guān)閉io流的文章就介紹到這了,更多相關(guān)try-with-resource優(yōu)雅關(guān)閉io流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 徹底理解Java 中的ThreadLocal

    徹底理解Java 中的ThreadLocal

    這篇文章主要介紹了徹底理解Java 中的ThreadLocal的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 利用Java編寫一個(gè)屬于自己的日歷

    利用Java編寫一個(gè)屬于自己的日歷

    這篇文章主要為大家介紹了如何利用Java編寫一個(gè)屬于自己的日歷,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起嘗試一下
    2022-05-05
  • java普通類如何轉(zhuǎn)javafx程序

    java普通類如何轉(zhuǎn)javafx程序

    這篇文章主要介紹了java普通類如何轉(zhuǎn)javafx程序方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java使用ajax完成上傳文件

    java使用ajax完成上傳文件

    這篇文章主要為大家詳細(xì)介紹了java使用ajax完成上傳文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java反射機(jī)制深入理解

    Java反射機(jī)制深入理解

    這篇文章主要介紹了Java反射機(jī)制深入理解的相關(guān)資料,希望通過本文大家能理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • JAVA讀取二進(jìn)制文件以及畫圖教程

    JAVA讀取二進(jìn)制文件以及畫圖教程

    由于項(xiàng)目需要,需要對二進(jìn)制文件進(jìn)行讀取,所以這篇文章主要給大家介紹了關(guān)于JAVA讀取二進(jìn)制文件以及畫圖的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • SpringBoot整合Redis哨兵模式的實(shí)現(xiàn)示例

    SpringBoot整合Redis哨兵模式的實(shí)現(xiàn)示例

    Redis哨兵模式是Redis高可用方案的一種實(shí)現(xiàn)方式,通過哨兵來自動(dòng)實(shí)現(xiàn)故障轉(zhuǎn)移,從而保證高可用,本文主要介紹了SpringBoot整合Redis哨兵模式的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Java 1,2,3,4能組成多少個(gè)互不相同且無重復(fù)數(shù)字的實(shí)現(xiàn)代碼

    Java 1,2,3,4能組成多少個(gè)互不相同且無重復(fù)數(shù)字的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java 1,2,3,4能組成多少個(gè)互不相同且無重復(fù)數(shù)字的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-02-02
  • SpringBoot配置數(shù)據(jù)庫密碼加密的方法

    SpringBoot配置數(shù)據(jù)庫密碼加密的方法

    由于系統(tǒng)安全的考慮,配置文件中不能出現(xiàn)明文密碼的問題,本文就給大家詳細(xì)介紹下springboot配置數(shù)據(jù)庫密碼加密的方法,下面話不多說了,來一起看看詳細(xì)的介紹吧,需要的朋友可以參考下
    2023-08-08
  • SpringBoot3結(jié)合gRpc實(shí)現(xiàn)遠(yuǎn)程服務(wù)調(diào)用的流程步驟

    SpringBoot3結(jié)合gRpc實(shí)現(xiàn)遠(yuǎn)程服務(wù)調(diào)用的流程步驟

    gRPC是一個(gè)現(xiàn)代開源高性能遠(yuǎn)程過程調(diào)用(RPC)框架,可以在任何環(huán)境中運(yùn)行,它由Google開發(fā),旨在幫助開發(fā)人員更輕松地構(gòu)建分布式應(yīng)用,特別是當(dāng)代碼可能在不同地方運(yùn)行的時(shí)候,本文介紹了SpringBoot3結(jié)合gRpc實(shí)現(xiàn)遠(yuǎn)程服務(wù)調(diào)用的流程步驟,需要的朋友可以參考下
    2024-07-07

最新評(píng)論