Java NIO 概述(一)

Java NIO(New IO)是用于Java(來自Java 1.4)的替代IO API乡革,意味著替代標(biāo)準(zhǔn) Java IOJava Networking API。Java NIO提供了與標(biāo)準(zhǔn)IO API不同的IO工作方式病附。

Java NIO:Channels和Buffers

在標(biāo)準(zhǔn)IO API中,您可以使用字節(jié)流和字符流抚岗。在NIO中瞧甩,您使用通道和緩沖區(qū)。數(shù)據(jù)總是從通道讀入緩沖區(qū)灶伊,或從緩沖區(qū)寫入通道疆前。

Java NIO:非阻塞IO(Non-blocking IO)

Java NIO使您可以執(zhí)行非阻塞IO。例如聘萨,一個(gè)線程可以請(qǐng)求一個(gè)通道將數(shù)據(jù)讀入緩沖區(qū)竹椒。當(dāng)通道讀取數(shù)據(jù)到緩沖區(qū)時(shí),線程可以做其他事情米辐。一旦數(shù)據(jù)被讀入緩沖區(qū)胸完,線程就可以繼續(xù)處理它。將數(shù)據(jù)寫入通道也是如此翘贮。

Java NIO:選擇器(Selectors)

Java NIO包含“選擇器”的概念赊窥。選擇器是一個(gè)可以監(jiān)視多個(gè)通道事件的對(duì)象(如:連接打開,數(shù)據(jù)到達(dá)等)择膝。因此誓琼,一個(gè)線程可以監(jiān)視多個(gè)通道的數(shù)據(jù)。

Java NIO由以下核心組件組成:

  • Channels(通道)
  • Buffers(緩沖區(qū))
  • Selectors(選擇)

Java NIO擁有比這些更多的類和組件肴捉,但在我看來Channel腹侣,BufferSelector構(gòu)成了API的核心。其余的組件齿穗,像 PipeFileLock只是實(shí)用程序類與三個(gè)核心組件一起使用傲隶。因此,我將在本NIO概述中關(guān)注這三個(gè)組件窃页。

頻道和緩沖區(qū)

通常跺株,NIO中的所有IO都從Channel開始。 Channel有點(diǎn)像小溪脖卖,從Channel數(shù)據(jù)可以讀取到一個(gè)Buffer乒省。數(shù)據(jù)也可以從Buffer寫入到Channel中。這是一個(gè)例子:

Java NIO:頻道和緩沖區(qū)

Java NIO:通道將數(shù)據(jù)讀入緩沖區(qū)畦木,緩沖區(qū)將數(shù)據(jù)寫入通道

有幾個(gè) ChannelBuffer 類型袖扛。以下是Channel Java NIO中主要實(shí)現(xiàn)的列表:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

如您所見,這些通道涵蓋UDP + TCP網(wǎng)絡(luò)IO和文件IO十籍。

這些類也有一些有趣的接口,但為了簡(jiǎn)單起見惨篱,我會(huì)將它們排除在Java NIO概述之外。在Java NIO教程的其他文章中,他們將在相關(guān)位置進(jìn)行解釋。

以下是BufferJava NIO 中的核心實(shí)現(xiàn)列表:

  • ByteBuffer(字節(jié)緩沖區(qū))
  • CharBuffer(字符緩沖區(qū))
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

這些Buffer涵蓋了您可以通過IO發(fā)送的基本數(shù)據(jù)類型:byte,short,int酗钞,long窘奏,float,double和characters。

Java NIO也有一個(gè)MappedByteBuffer類,它是與內(nèi)存映射文件結(jié)合使用的。盡管如此,我仍然將這一點(diǎn)從此概述中排除。

Selectors(選擇)

一個(gè)Selector允許單線程處理多個(gè)Channel。如果您的應(yīng)用程序有多個(gè)連接(通道)打開虐拓,但每個(gè)連接只有低流量,這很適用态兴。例如狠持,在聊天服務(wù)器中。

下面是一個(gè)使用一個(gè) Selector來處理3 的Channel的例子:

Java NIO:選擇器

Java NIO:一個(gè)線程使用一個(gè)選擇器來處理3個(gè)通道

要使用你注冊(cè)在ChannelSelector瞻润,你可以直接調(diào) select()方法喘垂。此方法將阻塞甜刻,直到有一個(gè)event準(zhǔn)備好已注冊(cè)的頻道之一。一旦該方法返回正勒,該線程就可以處理這些事件得院。event可理解為一些即將到來的connection,數(shù)據(jù)接收等昭齐。


Next:Java NIO Channel(二)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尿招,一起剝皮案震驚了整個(gè)濱河市矾柜,隨后出現(xiàn)的幾起案子阱驾,更是在濱河造成了極大的恐慌,老刑警劉巖怪蔑,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件里覆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缆瓣,警方通過查閱死者的電腦和手機(jī)喧枷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弓坞,“玉大人隧甚,你說我怎么就攤上這事《啥常” “怎么了戚扳?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)族吻。 經(jīng)常有香客問我帽借,道長(zhǎng),這世上最難降的妖魔是什么超歌? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任砍艾,我火速辦了婚禮,結(jié)果婚禮上巍举,老公的妹妹穿的比我還像新娘脆荷。我一直安慰自己,他們只是感情好懊悯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布蜓谋。 她就那樣靜靜地躺著,像睡著了一般定枷。 火紅的嫁衣襯著肌膚如雪孤澎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天欠窒,我揣著相機(jī)與錄音覆旭,去河邊找鬼退子。 笑死,一個(gè)胖子當(dāng)著我的面吹牛型将,可吹牛的內(nèi)容都是我干的寂祥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼七兜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼丸凭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腕铸,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤惜犀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后狠裹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虽界,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年涛菠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莉御。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俗冻,死狀恐怖礁叔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迄薄,我是刑警寧澤琅关,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站噪奄,受9級(jí)特大地震影響死姚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勤篮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一都毒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碰缔,春花似錦账劲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梗肝,卻和暖如春榛瓮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巫击。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工禀晓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留精续,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓粹懒,卻偏偏與公主長(zhǎng)得像重付,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凫乖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容