NIO

<meta charset="utf-8">

NIO

NIO主要有三大核心部分:

Channel(通道)译秦,Buffer(緩沖區(qū)), Selector(選擇器雅采,多路復(fù)用器)。

傳統(tǒng)IO基于字節(jié)流和字符流進行操作鸡岗,而NIO基于Channel和Buffer(緩沖區(qū))進行操作,數(shù)據(jù)總是從通道讀取到緩沖區(qū)中编兄,或者從緩沖區(qū)寫入到通道中轩性。Selector(選擇區(qū))用于監(jiān)聽多個通道的事件(比如:連接打開,數(shù)據(jù)到達)翻诉。因此炮姨,單個線程可以監(jiān)聽多個數(shù)據(jù)通道捌刮。

同步io和異步IO的區(qū)別

同步IO和異步IO模型是針對用戶線程和內(nèi)核的交互來說的:

對于同步IO:當用戶發(fā)出IO請求操作之后,如果數(shù)據(jù)沒有就緒舒岸,需要通過用戶線程或者內(nèi)核不斷地去輪詢數(shù)據(jù)是否就緒绅作,當數(shù)據(jù)就緒時,再將數(shù)據(jù)從內(nèi)核拷貝到用戶線程蛾派;

而異步IO:只有IO請求操作的發(fā)出是由用戶線程來進行的俄认,IO操作的兩個階段都是由內(nèi)核自動完成,然后發(fā)送通知告知用戶線程IO操作已經(jīng)完成洪乍。也就是說在異步IO中眯杏,不會對用戶線程產(chǎn)生任何阻塞。

Channel

首先說一下Channel壳澳,國內(nèi)大多翻譯成“通道”岂贩。Channel和IO中的Stream(流)是差不多一個等級的。只不過Stream是單向的巷波,譬如:InputStream, OutputStream.而Channel是雙向的萎津,既可以用來進行讀操作,又可以用來進行寫操作抹镊。

NIO中的Channel的主要實現(xiàn)有:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

這里看名字就可以猜出個所以然來:分別可以對應(yīng)文件IO锉屈、UDP和TCP(Server和Client)。下面演示的案例基本上就是圍繞這4個類型的Channel進行陳述的垮耳。

Buffer

NIO中的關(guān)鍵Buffer實現(xiàn)有:ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer颈渊,分別對應(yīng)基本數(shù)據(jù)類型: byte, char, double, float, int, long, short。當然NIO中還有MappedByteBuffer, HeapByteBuffer, DirectByteBuffer等這里先不進行陳述终佛。

Selector

Selector運行單線程處理多個Channel俊嗽,如果你的應(yīng)用打開了多個通道,但每個連接的流量都很低查蓉,使用Selector就會很方便乌询。例如在一個聊天服務(wù)器中。要使用Selector, 得向Selector注冊Channel豌研,然后調(diào)用它的select()方法妹田。這個方法會一直阻塞到某個注冊的通道有事件就緒。一旦這個方法返回鹃共,線程就可以處理這些事件鬼佣,事件的例子有如新的連接進來、數(shù)據(jù)接收等霜浴。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晶衷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晌纫,老刑警劉巖税迷,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锹漱,居然都是意外死亡箭养,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門哥牍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毕泌,“玉大人,你說我怎么就攤上這事嗅辣『撤海” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵澡谭,是天一觀的道長愿题。 經(jīng)常有香客問我,道長蛙奖,這世上最難降的妖魔是什么抠忘? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮外永,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拧咳。我一直安慰自己伯顶,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布骆膝。 她就那樣靜靜地躺著祭衩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阅签。 梳的紋絲不亂的頭發(fā)上掐暮,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音政钟,去河邊找鬼。 笑死,一個胖子當著我的面吹牛政冻,可吹牛的內(nèi)容都是我干的枕荞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碎连,長吁一口氣:“原來是場噩夢啊……” “哼灰羽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤廉嚼,失蹤者是張志新(化名)和其女友劉穎玫镐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怠噪,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡恐似,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了舰绘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹂喻。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖捂寿,靈堂內(nèi)的尸體忽然破棺而出口四,到底是詐尸還是另有隱情,我是刑警寧澤秦陋,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布蔓彩,位于F島的核電站,受9級特大地震影響驳概,放射性物質(zhì)發(fā)生泄漏赤嚼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一顺又、第九天 我趴在偏房一處隱蔽的房頂上張望更卒。 院中可真熱鬧,春花似錦稚照、人聲如沸蹂空。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽上枕。三九已至,卻和暖如春弱恒,著一層夾襖步出監(jiān)牢的瞬間辨萍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工返弹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锈玉,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓琉苇,卻偏偏與公主長得像嘲玫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子并扇,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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

  • Java NIO(New IO)是從Java 1.4版本開始引入的一個新的IO API去团,可以替代標準的Java I...
    JackChen1024閱讀 7,555評論 1 143
  • # Java NIO # Java NIO屬于非阻塞IO,這是與傳統(tǒng)IO最本質(zhì)的區(qū)別。傳統(tǒng)IO包括socket和文...
    Teddy_b閱讀 595評論 0 0
  • 一土陪、基本概念描述 1.1 I/O簡介 I/O即輸入輸出昼汗,是計算機與外界世界的一個借口。IO操作的實際主題是操作系統(tǒng)...
    4ea0af17fd67閱讀 413評論 0 0
  • 轉(zhuǎn)自 http://www.ibm.com/developerworks/cn/education/java/j-...
    抓兔子的貓閱讀 2,305評論 0 22
  • NIO概述 Java NIO全稱為Non-blocking IO或者New IO鬼雀,從名字我們知道NIO是非阻塞的I...
    zhong0316閱讀 599評論 0 7