NIO學習筆記(四)selector選擇器

2021-09-03 07:15:57 字數 797 閱讀 6725

1.監聽所有註冊在selector上的channel,只有當資料準備完成後,才會建立服務端執行緒,完成io操作

2.selector可以被所有繼承了selectablechannel類的channel註冊,但是只有filechannel例外,因為它沒有繼承這個抽象類。

3.選擇器類管理著乙個被註冊的channel集合資訊和他們的就緒狀態,選擇器和channel是一起被註冊的,乙個channel可以註冊在多個selector上,但是乙個channel在同乙個selector上只能註冊一次。

4.channel在被註冊到selector上之前,必須先切換到非阻塞狀態,否則會報乙個異常---->illegalblockingmodeexception。

5.選擇器註冊時有四種感興趣的操作,分別是read,write,connect,accept

但每乙個channel支援但操作卻不同,比如說serversocketchannel只支援accept,而socketchannel卻獨獨不支援accept,支援另三種,我們可以通過selectablechannel.validops()方法來獲取支援的方式.

6.乙個selectionkey物件上包含兩個以整數形式進行編碼的位元掩碼:乙個用於指示那些channel/selector組合體instrested的操作,另乙個用於指示channel準備好要執行的操作。

7:selector.select()選擇在這個selector上註冊的一組key,這組key上註冊的channel已經處於ready狀態。

8:selector.selectedkeys()獲取所有的key,根據key的不同狀態進行不同的讀寫操作。

NIO學習筆記四

第一行使用bytebuffer的靜態方法allocate 來分配緩衝區,函式引數指定了緩衝區的大小。第三行是將現有的陣列轉成緩衝區,通過靜態方法wrap 引數為現有的陣列。bytebuffer buffer bytebuffer.allocate 1024 byte array new byte 1...

NIO學習筆記二 Channels

這一章主要是對nio的channels進行說明。1 channels與io stream的區別。主要區別如下 2 channel 主要實現。主要實現類如下 3 channel 的簡單例子。以下是使用channel讀取檔案內容的簡單例子 public static void readfile stri...

NIO學習一 NIO簡介

最近在學習nio,根據學習總結了一下,如果有不對的地方,請大佬指出。nio,就是new io,從jdk 1.4開始引入的新的api,它跟io的作用相同。它與傳統的io相比,有如下特性 1 nio是面向緩衝區的,io是面向流的。2 io是阻塞的操作,如果乙個io的read或者write沒有得到資料的時...