Java NIO 由如下幾個核心部分組成:html
雖然Java NIO 中除此以外還有不少類和組件,但在我看來,Channel,Buffer 和 Selector 構成了核心的API。其它組件,如Pipe和FileLock,只不過是與三個核心組件共同使用的工具類。所以,在概述中我將集中在這三個組件上。其它組件會在單獨的章節中講到。java
基本上,全部的 IO 在 NIO 中都從一個 Channel 開始。Channel 有點象流。 數據能夠從 Channel 讀到 Buffer 中,也能夠從 Buffer 寫到 Channel 中。這裏有個圖示:編程
Channel 和 Buffer 有好幾種類型。下面是 JAVA NIO 中的一些主要 Channel 的實現:服務器
正如你所看到的,這些通道涵蓋了UDP 和 TCP 網絡IO,以及文件IO。網絡
與這些類一塊兒的有一些有趣的接口,但爲簡單起見,我儘可能在概述中不提到它們。本教程其它章節與它們相關的地方我會進行解釋。併發
如下是 Java NIO 裏關鍵的 Buffer 實現:app
這些 Buffer 覆蓋了你能經過 IO 發送的基本數據類型:byte, short, int, long, float, double 和 char。工具
Java NIO 還有個 MappedByteBuffer,用於表示內存映射文件, 我也不打算在概述中說明。線程
Selector 容許單線程處理多個 Channel。若是你的應用打開了多個鏈接(通道),但每一個鏈接的流量都很低,使用 Selector 就會很方便。例如,在一個聊天服務器中。htm
這是在一個單線程中使用一個 Selector 處理 3 個 Channel 的圖示:
要使用 Selector,得向 Selector 註冊 Channel,而後調用它的 select() 方法。這個方法會一直阻塞到某個註冊的通道有事件就緒。一旦這個方法返回,線程就能夠處理這些事件,事件的例子有如新鏈接進來,數據接收等。
轉載自併發編程網 – ifeve.com,本文連接地址: Java NIO系列教程(一) Java NIO 概述
Java NIO 系列:
天天用心記錄一點點。內容也許不重要,但習慣很重要!