在Java中,NIO讀寫是I/O的基本過程。 從通道讀取:建立一個緩衝區,然後請求通道讀取資料。通道寫入:建立一個緩衝區,填充資料,並要求通道寫入資料。
讀寫操作中使用的核心部件有:
Java NIO還有其它更多的元件和類,但是Channel
,Buffer
和Selector
用作API的核心。
在標準I/O API中,使用字元流和位元組流。 在NIO中使用通道和緩衝區。 NIO中的所有I/O都是通過一個通道開始的。資料總是從緩衝區寫入通道,並從通道讀取到緩衝區。
資料讀取操作:
下面來看看將資料從通道讀入緩衝區,如下圖所示:
資料寫入操作:
下面來看看從緩衝區將資料寫入通道,如下圖所示:
在Java NIO中,主要使用的通道如下:
上述通道涵蓋UDP(使用者資料報協定)+ TCP(傳輸控制協定)網路I/O和檔案I/O。
在Java NIO中使用的核心緩衝區如下:
上述緩衝區覆蓋了通過I/O傳送的基本資料型別:characters
,double
,int
,long
,byte
,short
和float
。
Java NIO提供了「選擇器」的概念。這是一個可以用於監視多個通道的物件,如資料到達,連線開啟等。因此,單執行緒可以監視多個通道中的資料。
如果應用程式有多個通道(連線)開啟,但每個連線的流量都很低,則可考慮使用它。 例如:在聊天伺服器中。
下面來看看執行緒使用選擇器來處理3
個通道,如下圖所示: