Java NIO 教程

Java NIO(Java New IO)是傳統(tǒng)IO的一種替代,它是在Java 1.4引進(jìn)的,它可以代替?zhèn)鹘y(tǒng)的IO和Java 網(wǎng)絡(luò)編程的API.Java NIO提供了一種以傳統(tǒng)IO不同的工作方式。

Java NIO:Channels and Buffers(通道和緩沖區(qū))
傳統(tǒng)的Java IO API主要用來處理字節(jié)流和字符流。在NIO中,你主要面向channels和buffers。數(shù)據(jù)是從channel讀入到buffer,或者從buffer寫出到channel。
Java NIO:NON-blocking IO(非阻塞式IO)
Java NIO是是非阻塞的IO,例如,一個(gè)線程正在從一個(gè)channel讀入數(shù)據(jù)到buffer,這個(gè)時(shí)候channel數(shù)據(jù)若是還沒準(zhǔn)備好,那么這個(gè)線程可以去處理其他事情。一旦channel準(zhǔn)備好了數(shù)據(jù),那么線程就可以繼續(xù)讀入數(shù)據(jù)到buffer。從buffer寫出數(shù)據(jù)到channel也是同理。
Java NIO:Selectors
Java NIO 包含選擇器這個(gè)概念。選擇器能夠監(jiān)控多個(gè)channel的事件(例如:連接打開,數(shù)據(jù)到達(dá)等)。因此,一個(gè)線程就能過管理多個(gè)channel的數(shù)據(jù)。

IO VS NIO
傳統(tǒng)的IO是阻塞式,你調(diào)用read()方法,必須等對(duì)方給你返回?cái)?shù)據(jù)你才可以干別的。只要對(duì)方不給你返回?cái)?shù)據(jù),你的線程就只能在那里干等著。
而NIO就是為了解決這個(gè)問題而設(shè)計(jì)的,它通過設(shè)計(jì)的Buffers,Channels和Selectors類來解決數(shù)據(jù)沒準(zhǔn)備好線程干等的問題。

這里舉個(gè)醫(yī)院里邊的一個(gè)例子來描述一下Java IO和Java NIO。
傳統(tǒng)的IO就好像早期醫(yī)院掛點(diǎn)滴,病人的點(diǎn)滴快完了,護(hù)士就得在邊上等,等病人的點(diǎn)滴完了后給換新的或者拔針。這個(gè)時(shí)候一個(gè)護(hù)士就只能等在這個(gè)病人的床邊,只能管理到一個(gè)病人。

NIO就像改進(jìn)后的醫(yī)院,在病人的床邊裝了告警鈴,這個(gè)時(shí)候病人點(diǎn)滴快掛完了,護(hù)士也不用干等著,可以去干其他事情(給其他病人換藥水等等......),只有等病人藥水掛完了按一下告警鈴,護(hù)士聽到就過來給換一下就好了。這樣就一個(gè)護(hù)士就可以管理很多病人了。

要真正理解NIO就需要帶這幾個(gè)問題思考:

  • Java NIO為什么會(huì)出現(xiàn)?
  • Java NIO要怎么使用?
  • 什么時(shí)候使用傳統(tǒng)IO,什么時(shí)候使用NIO?

下一節(jié):Java NIO 概述

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java NIO(New IO)是從Java 1.4版本開始引入的一個(gè)新的IO API,可以替代標(biāo)準(zhǔn)的Java I...
    JackChen1024閱讀 7,968評(píng)論 1 143
  • Java NIO(New IO)是從Java 1.4版本開始引入的一個(gè)新的IO API,可以替代標(biāo)準(zhǔn)的Java I...
    zhisheng_blog閱讀 1,200評(píng)論 0 7
  • 參考:http://ifeve.com/overview/原文地址 目錄 Java NIO教程 Java NIO ...
    步積閱讀 7,978評(píng)論 0 31
  • 參考:http://ifeve.com/java-nio-vs-io/原文地址 目錄 Java NIO教程 Jav...
    步積閱讀 5,187評(píng)論 0 44
  • 初心徒壯世沉淪,忍為當(dāng)年事事新。 狂歌不復(fù)舟中論,偷向花間鶯鳥啼。 人間沐露春風(fēng)盡,天地吹雨雪華衣。 待到山中旌旗...
    鬼醉風(fēng)閱讀 340評(píng)論 6 44

友情鏈接更多精彩內(nèi)容