Java NIO 概述

Java NIO包含如下核心組件:html

  • Channels
  • Buffers
  • Selectors

Java NIO有比這些更多的類和組件,但在我看來,Channel,Buffer和Selector構成了API的核心。 其他的組件,如Pipe和FileLock,只是與三個核心組件一塊兒使用的實用程序類。 所以,我將在本NIO概述中關注這三個組件。 其餘組件在本教程其餘地方的本身的文本中進行了解釋。 請參閱本頁頂部的菜單。java

Channels and Buffers

一般,NIO中的全部IO都以Channel開頭。 通道有點像流。 從Channel數據能夠讀入Buffer。 數據也能夠從Buffer寫入Channel。 這是一個例子:服務器

| Java NIO: Channels and Buffers | | Java NIO: Channels read data into Buffers, and Buffers write data into Channels |網絡

有幾種Channel和Buffer類型。 如下是Java NIO中主要Channel實現的列表:app

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

如您所見,這些通道涵蓋UDP + TCP網絡IO和文件IO。線程

這些類也有一些有趣的接口,但爲了簡單起見,我會將它們排除在Java NIO概述以外。 在Java NIO教程的其餘文本中,將相關地解釋它們。htm

如下是Java NIO中核心Buffer實現的列表:教程

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

這些緩衝區涵蓋了能夠經過IO發送的基本數據類型:byte,short,int,long,float,double和characters。接口

Java NIO還有一個MappedByteBuffer,它與內存映射文件一塊兒使用。 我將把這個緩衝區從這個概述中刪除。事件

Selectors

選擇器容許單個線程處理多個通道。 若是您的應用程序打開了許多鏈接(通道),但每一個鏈接只有較低的流量,這很方便。 例如,在聊天服務器中。

如下是使用Selector處理3個Channel的線程圖示:

| Java NIO: Selectors | | Java NIO: A Thread uses a Selector to handle 3 Channel's |

要使用選擇器,請使用它註冊通道。 而後你調用它的select()方法。 此方法將阻塞,直到有一個已註冊通道的事件準備就緒。 一旦該方法返回,該線程就能夠處理這些事件。 事件的示例是傳入鏈接,接收數據等。

相關文章
相關標籤/搜索