Java NIO 總覽

該系列文章翻譯自:http://tutorials.jenkov.com/java-nio/overview.html
留作記錄而已,順便方便大家查閱

Java NIO 包含以下核心組件:

  • Channels
  • Buffers
  • Selector

Java NIO具有比這些更多的類和組件,但是我認爲Channel,Buffer和Selector構成了API的核心。 其餘的組件(例如Pipe和FileLock)僅是實用程序類,可以與三個核心組件結合使用。因此,在本NIO概述中,我將重點介紹這三個組件。其他組件在本教程的其他地方以其自己的文本進行了說明。請參閱此頁面右側的菜單。

Channels 和 Buffer

通常,NIO中的所有IO均以通道開頭。通道有點像流。從通道可以將數據讀入緩衝區。數據也可以從緩衝區寫入通道。這是一個說明:
Java NIO: 從Channel 讀數據到Buffer,或者從Buffer寫數據到Channel
Java提供了幾種和Buffer類型。下面是Java NIO中主要Channel實現的列表:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

其中涵蓋了UDP/TCP這兩網絡IO,還有文件IO。

這些類也有一些有趣的接口,但是爲了簡單起見,我將它們排除在Java NIO概述之外。在本Java NIO教程中的其他相關文本中將對它們進行解釋。

下面是Java NIO中提供的核心Buffer列表:

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

這些Buffer涵蓋了可以通過IO發送的基本數據類型:字節,短,整數,長,浮點,雙精度和字符。

Java NIO還具有MappedByteBuffer,它與內存映射文件結合使用。不過,我在概述中並不準備提及。

Selectors

選擇器允許單個線程處理多個Channel。 如果您的應用程序打開了許多連接(Channel),但每個連接的流量很少,應該嘗試使用Selector。例如,在聊天服務器中。 這是使用Selector同時處理3個通道的線程的圖示:
Java NIO: 通過Selector一個線程管理三個Channel
使用Selector時,需要將Channel註冊到Selector上。 然後調用它的select()方法。該方法將一直阻塞,直到註冊的某一個Channel有一個事件發生。事件發生後會停止阻塞,線程即可處理這個事件。事件示例有:傳入連接、接收到的數據等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章