日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

小师妹学JavaIO之:try with和它的底层原理

發(fā)布時間:2024/2/28 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小师妹学JavaIO之:try with和它的底层原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 簡介
  • IO關閉的問題
  • 使用try with resource
  • try with resource的原理
  • 自定義resource
  • 總結

簡介

小師妹是個java初學者,最近正在學習使用java IO,作為大師兄的我自然要給她最給力的支持了。一起來看看她都遇到了什么問題和問題是怎么被解決的吧。

IO關閉的問題

這一天,小師妹一臉郁悶的問我:F師兄,我學Java IO也有好多天了,最近寫了一個例子,讀取一個文件沒有問題,但是讀取很多個文件就會告訴我:”Can’t open so many files“,能幫我看看是什么問題嗎?

更多內容請訪問www.flydean.com

小師妹的要求當然不能拒絕,我立馬響應:可能打開文件太多了吧,教你兩個命令,查看最大文件打開限制。

一個命令是 ulimit -a

第二個命令是

ulimit -n 256

看起來是你的最大文件限制太小了,只有256個,調大一點就可以了。

小師妹卻說:不對呀F師兄,我讀文件都是一個一個讀的,沒有同時開這么多文件喲。

好吧,看下你寫的代碼吧:

BufferedReader bufferedReader = null;try {String line;bufferedReader = new BufferedReader(new FileReader("trywith/src/main/resources/www.flydean.com"));while ((line = bufferedReader.readLine()) != null) {log.info(line);}} catch (IOException e) {log.error(e.getMessage(), e);}

看完代碼,問題找到了,小師妹,你的IO沒有關閉,應該在使用之后,在finally里面把你的reader關閉。

下面這段代碼就行了:

BufferedReader bufferedReader = null;try {String line;bufferedReader = new BufferedReader(new FileReader("trywith/src/main/resources/www.flydean.com"));while ((line = bufferedReader.readLine()) != null) {log.info(line);}} catch (IOException e) {log.error(e.getMessage(), e);} finally {try {if (bufferedReader != null){bufferedReader.close();}} catch (IOException ex) {log.error(ex.getMessage(), ex);}}

小師妹道了一聲謝,默默的去改代碼了。

使用try with resource

過了半個小時 ,小師妹又來找我了,F師兄,現(xiàn)在每段代碼都要手動添加finally,實在是太麻煩了,很多時候我又怕忘記關閉IO了,導致程序出現(xiàn)無法預料的異常。你也知道我這人從來就怕麻煩,有沒有什么簡單的辦法,可以解決這個問題呢?

那么小師妹你用的JDK版本是多少?

小師妹不好意思的說:雖然最新的JDK已經到14了,我還是用的JDK8.

JDK8就夠了,其實從JDK7開始,Java引入了try with resource的新功能,你把使用過后要關閉的resource放到try里面,JVM會幫你自動close的,是不是很方便,來看下面這段代碼:

try (BufferedReader br = new BufferedReader(new FileReader("trywith/src/main/resources/www.flydean.com"))){String sCurrentLine;while ((sCurrentLine = br.readLine()) != null){log.info(sCurrentLine);}} catch (IOException e) {log.error(e.getMessage(), e);}

try with resource的原理

太棒了,小師妹非常開心,然后又開始問我了:F師兄,什么是resource呀?為什么放到try里面就可以不用自己close了?

resource就是資源,可以打開個關閉,我們可以把實現(xiàn)了java.lang.AutoCloseable接口的類都叫做resource。

先看下AutoCloseable的定義:

public interface AutoCloseable {void close() throws Exception; }

AutoCloseable定義了一個close()方法,當我們在try with resource中打開了AutoCloseable的資源,那么當try block執(zhí)行結束的時候,JVM會自動調用這個close()方法來關閉資源。

我們看下上面的BufferedReader中close方法是怎么實現(xiàn)的:

public void close() throws IOException {synchronized (lock) {if (in == null)return;in.close();in = null;cb = null;} }

自定義resource

小師妹恍然大悟:F師兄,那么我們是不是可以實現(xiàn)AutoCloseable來創(chuàng)建自己的resource呢?

當然可以了,我們舉個例子,比如給你解答完這個問題,我就要去吃飯了,我們定義這樣一個resource類:

public class CustResource implements AutoCloseable {public void helpSister(){log.info("幫助小師妹解決問題!");}@Overridepublic void close() throws Exception {log.info("解決完問題,趕緊去吃飯!");}public static void main(String[] args) throws Exception {try( CustResource custResource= new CustResource()){custResource.helpSister();}} }

運行輸出結果:

[main] INFO com.flydean.CustResource - 幫助小師妹解決問題! [main] INFO com.flydean.CustResource - 解決完問題,趕緊去吃飯!

總結

最后,小師妹的問題解決了,我也可以按時吃飯了。

本文的例子https://github.com/ddean2009/learn-java-io-nio

更多精彩內容且看:

  • 區(qū)塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續(xù)更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續(xù)更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續(xù)更新
  • java程序員從小工到專家成神之路(2020版)-持續(xù)更新中,附詳細文章教程

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/io-try-with/

本文來源:flydean的博客

歡迎關注我的公眾號:程序那些事,更多精彩等著您!

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的小师妹学JavaIO之:try with和它的底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丁香婷婷在线 | 少妇高潮21p | 亚洲乱码精品久久久久.. | 亚洲h网站| 黄黄视频在线观看 | 老熟妻内射精品一区 | 在线五月天 | 久久久久亚洲av无码专区体验 | 国产在线麻豆 | 牛牛av国产一区二区 | 天天天天天天操 | 日日爽日日操 | 亚洲欧美日韩国产精品 | 夜夜夜夜操 | 久久艳片www.17c.com | 久久一级免费视频 | 一本一道无码中文字幕精品热 | 啪网站| 日本在线观看a | 国产成人aⅴ | 特级西西444www大精品视频 | 日韩av中文在线观看 | 用舌头去添高潮无码视频 | 操人视频在线观看 | 成人精品动漫 | 亚洲欧美一区二区三区 | 国产在线精品一区二区 | 中国av在线播放 | 国产拍拍拍 | 国产又色又爽又黄的 | 日韩二区三区四区 | 欧美看片 | 99精品在线| 亚洲av无码潮喷在线观看 | 色欲久久久天天天精品综合网 | 美女涩涩视频 | 久久亚洲综合色图 | 女同动漫免费观看高清完整版在线观看 | 一区二区免费在线视频 | av无线看 | 国产精品理论片在线观看 | 日韩福利视频在线观看 | 夜夜爽网站 | 3d动漫精品啪啪一区二区竹菊 | 黑人性生活视频 | 国产精品蜜臀 | 亚洲一区二区精品在线观看 | 男女做爰猛烈吃奶啪啪喷水网站 | 精品国产一区二区三区久久久久久 | 自拍偷拍国产视频 | 日本中文字幕成人 | 精品九九视频 | 97潮色 | 一区二区三区免费 | 亚洲一区二区三区香蕉 | 91尤物视频在线观看 | 亚洲天堂色图 | 都市激情校园春色 | 日韩另类视频 | 国产91丝袜在线播放九色 | 欧美一区二区三区激情啪啪 | 国产精彩视频在线 | 性做久久久久久久免费看 | 少妇被按摩师摸高潮了 | 日本精品视频一区二区 | 91丨porny丨露出| 精品久久久国产 | 中文字幕日韩经典 | 亚洲天堂v | 极品白嫩丰满少妇无套 | 精品日韩一区 | 成人免费xxxxx在线观看 | 国产免费视频一区二区三区 | 中文字幕――色哟哟 | 亚洲 日本 欧美 中文幕 | 超碰在线cao | 色草在线 | 777视频在线观看 | 丰满少妇一区 | 亚洲精品国产精品国自产网站 | 88av.com| 天天操天天干天天 | 亚洲综合第一区 | 欧美日韩国产91 | 亚洲第一色网站 | 催眠调教艳妇成肉便小说 | 日韩视频一区二区三区在线播放免费观看 | 激情网站免费 | 97青青草 | 中文字幕第11页 | 欧美s码亚洲码精品m码 | 国产性猛交xxxⅹ交酡全过程 | 久久国产一区二区 | 日韩欧美一区二区视频 | 久久久免费看片 | 高潮一区二区三区乱码 | 伊人久久青青 | 色欲久久久天天天精品综合网 | 97中文字幕|