Java NIO元件


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

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

  • Channels
  • Buffers
  • Selectors

Java NIO還有其它更多的元件和類,但是ChannelBufferSelector用作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傳送的基本資料型別:charactersdoubleintlongbyteshortfloat

選擇器

Java NIO提供了「選擇器」的概念。這是一個可以用於監視多個通道的物件,如資料到達,連線開啟等。因此,單執行緒可以監視多個通道中的資料。

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

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