NIO程式設計要點總結二

2021-10-14 12:04:11 字數 1660 閱讀 6421

承接上篇 nio程式設計要點總結一,繼續進行nio要點梳理

3.selector方法說明:

(1)selector.open():建立並返回乙個選擇器物件

(2)selector.select():監控所有通道channel,有事件發生則會將其對應的selectionkey加入到內部集合並將該集合的元素個數返回

(3)selector.selectedkeys():獲取內部集合發生了事件的channel對應key值,可以用iterator方法進行遍歷

(4)select()會阻塞,select(time)會在time毫秒之後返回,selectnow()不會阻塞立即返回

(1)selector():得到與其相關的selector物件

(2)channel():得到與其相關的channel物件

(3)interestops():設定或者改變key對應的監聽事件

(1)open():獲取乙個serversocketchannel物件

(2)bind(socketaddress):設定伺服器端口號

(3)confugureblocking():設定阻塞或者非阻塞模式

(4)register(selctor,ops):註冊selector並選擇監聽事件

(1)open():獲取乙個socketchannel物件

(2)connect(socketaddress):連線伺服器端口號

(3)confugureblocking():設定阻塞或者非阻塞模式

(4)register(selctor,ops,obj):註冊selector並選擇監聽事件

(5)close():關閉通道

7.網路程式設計伺服器流程:

(1)建立並開啟乙個selector和serversocketchannel(***.open())

(2)serversocketchannel繫結埠(***.bind(new inetsocketaddress(port)))

(3)serversocketchannel設定為非阻塞模式(***.confugureblocking(false))

(4)serversocketchannel註冊到selector(***.register(selector,selectionkey.op_***)),狀態共四種

1)int op_accept:有新的網路連線可以 accept,值為 16 

2)int op_connect:代表連線已經建立,值為 8

3)int op_read:代表讀操作,值為 1

4)int op_write:代表寫操作,值為 4

(5)進行迴圈監聽,使用select()函式獲取需要處理事件的通道個數,並通過selector.selectionkeys()函式獲取對應key

(6)如果key.isacceptable(),建立socketchannel,將其設定為非阻塞,並將其註冊到selector上;如果是其他狀態,則編寫對應方法,或讀取或寫入,以讀取為例,首先使用key.channel()方法反向獲取key對應的socketchannel,並建立buffer將channel中的資料讀取到buffer中進行後續操作

(7)如果使用selectionkeys.iterator(),注意對該key值操作完成之後,將其從iterator中刪除

IO程式設計 二 NIO程式設計概念

注意標題.此章只是讓我們對nio有個概念,而不是讓你真正的去敲或者熟悉以下 傳統bio程式設計如圖1,來乙個客戶端連線就需要乙個新的執行緒.而nio中會把新的連線註冊到 selector 上,然後,通過檢查這個 selector,就可以批量監測出有資料可讀的連線,進而讀取資料 舉個例子 幼兒園小朋友...

NIO程式設計

1.客戶端關閉 的時候會拋異常 死迴圈 int read channel.read buffer if read 0 else 客戶端關閉 key.cancel 登出當前key 2.selector.select 阻塞 為什麼說nio 是非阻塞的io selector.select selector...

NIO網路程式設計

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