四 NIO網路程式設計原理分析

2021-10-21 10:43:26 字數 1658 閱讀 6347

nio 非阻塞網路程式設計相關的(selector、selectionkey、serverscoketchannel和socketchannel) 關係梳理圖

當客戶端連線時,會通過serversocketchannel 得到 socketchannel

selector 進行監聽 select 方法, 返回有事件發生的通道的個數.

將socketchannel註冊到selector上, register(selector sel, int ops), 乙個selector上可以註冊多個socketchannel

註冊後返回乙個 selectionkey, 會和該selector 關聯(集合)

進一步得到各個 selectionkey(有事件發生) 在通過 selectionkey 反向獲取 socketchannel , 方法 channel()

可以通過 得到的 channel , 完成業務處理

nioserver

public

class

nioserver

//如果返回的》0, 就獲取到相關的 selectionkey集合

//1.如果返回的》0, 表示已經獲取到關注的事件

//2. selector.selectedkeys() 返回關注事件的集合

// 通過 selectionkeys 反向獲取通道

setselectionkeys = selector.

selectedkeys()

; system.out.

println

("selectionkeys 數量 = "

+ selectionkeys.

size()

);//遍歷 set, 使用迭代器遍歷

iterator

keyiterator = selectionkeys.

iterator()

;while

(keyiterator.

hasnext()

)if(key.

isreadable()

)//手動從集合中移動當前的selectionkey, 防止重複操作

keyiterator.

remove()

;}}}

}

nioclient

public

class

nioclient

}//...如果連線成功,就傳送資料

string str =

"hello, world~"

;//wraps a byte array into a buffer

bytebuffer buffer = bytebuffer.

wrap

(str.

getbytes()

);//傳送資料,將 buffer 資料寫入 channel

socketchannel.

write

(buffer)

; system.in.

read();}}

NIO網路程式設計

nio buffer陣列緩衝區 獲取物件 allocate int capacity allocatedirect int capacity wrap byte byte 常用方法 put 新增元素 capacity 容量 陣列的大小 position 位置 要存放元素位置,每操作乙個元素,位置就會...

網路程式設計 NIO基礎

nio核心元件 1 buffer緩衝區 buffer工作原理 bytebuffer的簡單使用 通過下面這個簡單 可以深入理解上面三個引數在每次讀或寫之後的變化 public class bufferdemo ps 關於bytebuffer 2 channel通道 客戶端socketchannel 伺...

IO與NIO網路程式設計模型

一 bio bolcking io 阻塞分析 阻塞點 1.建立服務埠 serversocket serversocket new serversocket 12345 獲取socket套接字 socket socket serversocket.accept 阻塞等待客戶端連線 2.獲取客戶端輸入流...