Java NIO學習總結

2021-08-13 10:27:10 字數 1101 閱讀 5410

1、nio的概念

從jdk1.4開始就出現非阻塞式(non-blocking)io,是基於通道(channel)和緩衝區(buffer)進行操作

內部設定兩個緩衝區(傳送區、接收區)和高速通道

兩個緩衝區:傳送區、接收區

高速通道:封裝了socket

2、nio的模式

資料從高速通道中出來,都會進入接收池,再由傳送池通過高速通道返回

由客戶端在selector註冊事件,由執行緒不斷輪詢事件

selector:基本事件註冊器:op_accept(監聽)、op_connect(連線)、op_read(讀取)、op_write(寫入)

執行緒輪詢selector註冊器事件,通過selector key返回集合

3、五種模型

阻塞io(blocking io)

非阻塞io(non-blocking io)

多路復用io(multiplexing io)

訊號驅動式io(signal-driven io)

非同步io(asynchronous io)

4、nio核心組成部分

channel:高速通道

serversocketchannel:通過自身靜態工廠方法建立例項,封裝了serversocket,屬於blocking io模式,一般不會直接拿serversocket直接監聽埠

configureblocking:高速通道只有在阻塞式才能用,非阻塞式不能用,所以此屬性需要設定為false,能才使用阻塞

selector多路註冊器:通過自身靜態工廠方法建立例項,通過selectorkey.op_accept在高速通道register註冊事件到socketchannel上,註冊完成後,執行緒在四大事件輪詢,上獲取set集合

selectorkey包含channel和selector

5、具體方法說明

selectionkey.interestops:獎此對應的channel設定為準備接受其它客戶端的事件型別

register:在該channel上註冊事件,為selectionkey下次輪詢的事件

6、注意事項:

伺服器端的selectionkey不能用非同步處理,如果非同步處理,沒有註冊其它鍵會迴圈遍歷重複的key

Java NIO學習總結三(Selector)

public class selectortest else if sktemp.isreadable if bb.position bb.capacity bb.clear keys.remove sktemp catch ioexception e 上例中可以看出使用selector的一般過程,...

NIO學習 一 java nio介紹

如果有一組客戶端,需要連線到乙個服務端,如果使用i o操作,乙個客戶端連線上,其他客戶端需要阻塞等待,或者採用每個客戶端請求,建立乙個執行緒的方式,這樣很耗費資源,nio提供了方法能夠輪詢一組客戶端 channel 通道 乙個channel代表了乙個可操作的i o目標,比如套接字 buffer 緩衝...

學習JavaNIO 檔案記憶體對映

檔案對映有個需要注意的問題,就是你無法確保他被釋放了。也就是只有對映的記憶體被 檔案才會被釋放。否則其他程序訪問就是被鎖狀態。所以這個對於乙個程序乙個檔案。如果多個程序訪問乙個檔案,還是不是很適合。最近看了檔案記憶體對映。在nio中,使用起來很方便。檔案通過記憶體對映以後,訪問速度自然是提高了。當然...