如果有一組客戶端,需要連線到乙個服務端,如果使用i/o操作,乙個客戶端連線上,其他客戶端需要阻塞等待,或者採用每個客戶端請求,建立乙個執行緒的方式,這樣很耗費資源,nio提供了方法能夠輪詢一組客戶端
channel 通道
乙個channel代表了乙個可操作的i/o目標,比如套接字
buffer 緩衝區
buffer代表了乙個有限容量的容器
selector 選擇器
和通道一起使用,選擇可以操作的通道
channel例項代表了乙個和裝置的連線,通過buffer實現輸入和輸出操作。資料可以從channel讀到buffer中,也可以從buffer寫到channel中
channel -> buffer buffer -> channel
套接字的操作,如建立連線/接受連線,i/o操作都會阻塞。
nio的強大之處在於channel的可配置它的阻塞行為,實現非阻塞式的通道
在使用非阻塞式客戶端時候,如果只存在乙個即時訊息伺服器,可能有上千個客戶端連線到伺服器,但任何時刻都只有少量的訊息需要讀取和分發,這就需要一種方法阻塞等待,直到至少有乙個通道可以進行i/o操作,並指出是哪個通道。
乙個selector例項可以同時檢查一組通道的i/o狀態,認為選擇器就是乙個多路開關選擇器,乙個選擇器能夠管理多個通道上的i/o操作。
通過將選擇器註冊到通道上,能夠管理一組通道,呼叫選擇器的select方法,該方法會阻塞等待,直到乙個或更多
通道i/o操作準備好,或者等待超時
Java NIO 一 NIO的基本概念與使用
public classtestbuffer 控制台輸出 allocate初始化大小 position 0 limit 1024 capacity 1024 allocate存入資料後的變化 position 11 limit 1024 capacity 1024 allocate切換為讀取模式的變...
NIO學習一 NIO簡介
最近在學習nio,根據學習總結了一下,如果有不對的地方,請大佬指出。nio,就是new io,從jdk 1.4開始引入的新的api,它跟io的作用相同。它與傳統的io相比,有如下特性 1 nio是面向緩衝區的,io是面向流的。2 io是阻塞的操作,如果乙個io的read或者write沒有得到資料的時...
Java NIO學習總結
1 nio的概念 從jdk1.4開始就出現非阻塞式 non blocking io,是基於通道 channel 和緩衝區 buffer 進行操作 內部設定兩個緩衝區 傳送區 接收區 和高速通道 兩個緩衝區 傳送區 接收區 高速通道 封裝了socket 2 nio的模式 資料從高速通道中出來,都會進入...