Java NIO組件
在Java中,NIO讀寫是I/O的基本過程。 從通道讀取:創建一個緩衝區,然後請求通道讀取數據。通道寫入:創建一個緩衝區,填充數據,並要求通道寫入數據。
讀寫操作中使用的核心部件有:
- Channels
- Buffers
- Selectors
Java NIO還有其它更多的組件和類,但是Channel
,Buffer
和Selector
用作API的核心。
通道和緩衝區
在標準I/O API中,使用字符流和字節流。 在NIO中使用通道和緩衝區。 NIO中的所有I/O都是通過一個通道開始的。數據總是從緩衝區寫入通道,並從通道讀取到緩衝區。
數據讀取操作:
下面來看看將數據從通道讀入緩衝區,如下圖所示:
數據寫入操作:
下面來看看從緩衝區將數據寫入通道,如下圖所示:
通道列表
在Java NIO中,主要使用的通道如下:
- DatagramChannel
- SocketChannel
- FileChannel
- ServerSocketChannel
上述通道涵蓋UDP(用戶數據報協議)+ TCP(傳輸控制協議)網絡I/O和文件I/O。
緩衝列表
在Java NIO中使用的核心緩衝區如下:
- CharBuffer
- DoubleBuffer
- IntBuffer
- LongBuffer
- ByteBuffer
- ShortBuffer
- FloatBuffer
上述緩衝區覆蓋了通過I/O發送的基本數據類型:characters
,double
,int
,long
,byte
,short
和float
。
選擇器
Java NIO提供了「選擇器」的概念。這是一個可以用於監視多個通道的對象,如數據到達,連接打開等。因此,單線程可以監視多個通道中的數據。
如果應用程序有多個通道(連接)打開,但每個連接的流量都很低,則可考慮使用它。 例如:在聊天服務器中。
下面來看看線程使用選擇器來處理3
個通道,如下圖所示: