Java NIO組件

在Java中,NIO讀寫是I/O的基本過程。 從通道讀取:創建一個緩衝區,然後請求通道讀取數據。通道寫入:創建一個緩衝區,填充數據,並要求通道寫入數據。

讀寫操作中使用的核心部件有:

  • Channels
  • Buffers
  • Selectors

Java NIO還有其它更多的組件和類,但是ChannelBufferSelector用作API的核心。

通道和緩衝區

在標準I/O API中,使用字符流和字節流。 在NIO中使用通道和緩衝區。 NIO中的所有I/O都是通過一個通道開始的。數據總是從緩衝區寫入通道,並從通道讀取到緩衝區。

數據讀取操作:

下面來看看將數據從通道讀入緩衝區,如下圖所示:

Java

數據寫入操作:

下面來看看從緩衝區將數據寫入通道,如下圖所示:

Java

通道列表

在Java NIO中,主要使用的通道如下:

  • DatagramChannel
  • SocketChannel
  • FileChannel
  • ServerSocketChannel

上述通道涵蓋UDP(用戶數據報協議)+ TCP(傳輸控制協議)網絡I/O和文件I/O。

緩衝列表

在Java NIO中使用的核心緩衝區如下:

  • CharBuffer
  • DoubleBuffer
  • IntBuffer
  • LongBuffer
  • ByteBuffer
  • ShortBuffer
  • FloatBuffer

上述緩衝區覆蓋了通過I/O發送的基本數據類型:charactersdoubleintlongbyteshortfloat

選擇器

Java NIO提供了「選擇器」的概念。這是一個可以用於監視多個通道的對象,如數據到達,連接打開等。因此,單線程可以監視多個通道中的數據。

如果應用程序有多個通道(連接)打開,但每個連接的流量都很低,則可考慮使用它。 例如:在聊天服務器中。

下面來看看線程使用選擇器來處理3個通道,如下圖所示:

Java