NIO學習 一 java nio介紹

2021-08-09 11:38:08 字數 824 閱讀 7985

如果有一組客戶端,需要連線到乙個服務端,如果使用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的模式 資料從高速通道中出來,都會進入...