1. 程式人生 > >【JAVA】【NIO】2、Java NIO Overview

【JAVA】【NIO】2、Java NIO Overview

Java NIO主要有以下核心元件構成:

  1. 通道
  2. 快取
  3. 選擇器
    Java NIO其實有比上面更多的類和元件,但是在我看來,Channel,Buffer,Selector是核心的API。其它元件,像管道和檔案鎖,僅僅只是在與三大核心元件結合使用時的通用工具類。

通道和快取

一般來說,NIO中的所有IO都是從通道開始的。通道就像一個流,資料可以從通道中讀到一個快取裡去,同樣,資料可以從快取寫進通道里
這裡寫圖片描述
上面代表讀操作,下面代表寫操作

在Java NIO中,主要有如下幾種通道:
·FileChannel
·DatagramChannel
·SocketChannel
·ServerSocketChannel
這些通道覆蓋了網路中的TCP,UDP的IO和檔案IO。

在Java NIO中,核心的快取如下:
·ByteBuffer
·CharBuffer
·DoubleBuffer
·FloatBuffer
·IntBuffer
·LongBuffer
·ShortBuffer
這些快取包括了通過IO傳送資料的基本資料型別。
Java NIO還有一個MappedByteBuffer是用於記憶體檔案對映的。

選擇器

一個選擇器允許單個執行緒處理多個通道的資料。如果你的應用打開了很多連線(channel),這就非常方便了,但是每個連線(channel)的流量會小一點。比如聊天伺服器。
這裡寫圖片描述
單個執行緒通過選擇器處理三個通道

首先把通道註冊到選擇器上,然後你呼叫select()方法,這個方法會阻塞,直到有一個通道在你註冊的事件上就緒了。一旦方法返回了,執行緒就可以處理事件了。事件可以是建立連線,接受資料等等。

這裡提前附上一段程式碼,各位讀者,先看下,後面會慢慢講解,程式碼中也會有詳細的註釋
這裡寫圖片描述

這段程式碼就描述了選擇器,註冊等相關機制。