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.獲取客戶端輸入流...