Java網(wǎng)絡(luò)編程(三)一文讀懂NIO
什么是NIO
NIO被稱作是 New IO或者Non block IO。它是Jdk1.4開(kāi)發(fā)引入的類庫(kù)。NIO與BIO的最大不同是,BIO是面向流,而BIO是面向緩沖區(qū)buffer。Java的IO數(shù)據(jù)流向是固定的,要么讀,要么寫。但是NIO則可以同時(shí)支持讀寫。

NIO三大核心
1.Selector
前面的linux的5種IO模型?提到過(guò),NIO模型會(huì)不斷的輪詢,向操作系統(tǒng)確認(rèn)數(shù)據(jù)。Jdk中,Selector承當(dāng)了這個(gè)職責(zé)。Selector維護(hù)著一張Channel列表,然后不斷輪詢檢查channel狀態(tài)。一旦發(fā)生某個(gè)channel發(fā)生讀寫事件,就會(huì)被檢測(cè)到,進(jìn)行后續(xù)的IO操作。

2.Channel
應(yīng)用程序與底層操作系統(tǒng)之間的橋梁,應(yīng)用程序能通過(guò)channel讀取數(shù)據(jù),也能通過(guò)它向操作系統(tǒng)寫入數(shù)據(jù)。
3.Buffer
緩沖區(qū)buffer是一個(gè)對(duì)象,它包含了需要寫入或者讀出的數(shù)據(jù)。Buffer有3個(gè)重要屬性:
capacity:
存儲(chǔ)數(shù)據(jù)的最大容量,你只能最大往里面寫capacity個(gè)int、short等類型數(shù)據(jù)。滿了之后,需要通過(guò)讀取數(shù)據(jù)或者清楚數(shù)據(jù)兩種方法,才能繼續(xù)往里面寫。
position:
讀模式(Reading mode)下,代表了從這開(kāi)始讀。
寫模式(Writing mode)下,代表了從這開(kāi)始寫。
buffer.clear能將清空重新寫入,buffer的flip能將寫模式切換為讀模式
limit:
讀模式(Reading mode)下,表示你最多能讀多少條數(shù)據(jù)。在從寫模式切換到讀模式,position與limit數(shù)值相同,代表你能讀取之前寫入的所有數(shù)據(jù)。
寫模式(Writing mode)下,數(shù)值與capacity相同。


Nio的寫
1.selector輪詢監(jiān)聽(tīng)到通道寫事件
2.數(shù)據(jù)寫入到buffer緩存
3.buffer緩存數(shù)據(jù)通過(guò)channel通道發(fā)送出去

Nio的讀
1.數(shù)據(jù)通過(guò)channel接收數(shù)據(jù)到buffer
2.selector輪詢觸發(fā)
3.數(shù)據(jù)讀取到應(yīng)用程序

Nio的全模式

Java的八大基本類型,除了Boolean類型外,其他都有對(duì)應(yīng)的Buffer,至于這是為什么,就留給聰明的你來(lái)解答了。