1 Java NIO概述-翻譯

weixin_34239169發表於2017-12-06

Java NIO由以下幾個部分組成

  • Channels
  • Buffers
  • Selecters

雖然Java NIO除此之外還包括更多的元件,但在我看來,Channel,Buffer,Selecter構成了核心API。其它的元件,如Pipe和FileLock僅僅是這三個核心元件使用的工具類。因此,在NIO概述中我將關注這三個元件。其它元件將在各自的章節中講到。目錄詳見左上角。

Channel 和 Buffer

基本上,NIO中的所有IO都由Channel開始。一個Channel與流相似,通過Channel,資料可以被讀入到Buffer中,資料同樣可以從緩衝區寫入到Channel。這裡有個圖示:

Channel和Buffer有好幾種型別。以下是Java NIO中幾種主要的Channel。

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

正如你所見到的,這些通道包括了TCP和UDP的網路IO和檔案IO。

與這些類一起的還有些有趣的介面,但是為簡單起見,我在概述中儘量不提他們。他們將在其它章節相關的地址進行詳細介紹。

以下是一些在Java NIO中實現的核心Buffer。

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

這些Buffer覆蓋了你通過IO傳送的基本資料型別,:byte, short, int, long, float, double 和 char。

Java NIO也提供了MappedByteBuffer來進行記憶體檔案的對映,我也不打算在概述中進行說明。

Selectors

Selector允許一個執行緒控制多個通道,如果你的應用程式有許多連線(通道)開啟,並且每個連線的流量都非常小,這將變得非常方便,例如在一個聊天伺服器中。 下圖是一個使用單執行緒使用Selector.

在使用Selector前需要在Channel中註冊它。然後你可以呼叫select()方法,這個方法將會阻塞直到註冊的通道中有準備好的事件。一旦這個方法返回,這個執行緒可以處理這些事件,事件的例子有新連線進來,資料到達等。

相關文章