java1.4版本以後引入了新的io庫,被稱做java New IO類庫,NIO彌補了面向流的OIO同步阻塞的不足,它爲標準Java代碼提供了高速的、面向緩衝區的IO。
如下爲三個核心組件:java
Java NIO使用的是IO多路複用模型。服務器
在OIO中,同一個網絡鏈接會關聯到兩個流:一個輸入流(Input Stream),另外一個輸出流(Output Stream)。經過兩個流,不斷地進行輸入和輸出操做。
在NIO中,同一個網絡鏈接使用一個通道標識,全部的NIO的IO操做都是從通道開始的。網絡
選擇器能夠監聽IO事件,是一個IO事件的查詢器。經過選擇器,一個線程能夠查詢多個通道的IO時間的就緒狀態。
實現IO多路複用,從具體的開發層面說,首先把通道註冊到選擇器中,而後經過選擇器,能夠查詢這些註冊的通道是否有已經就緒的IO事件。spa
應用程序與通道主要的交互操做,就是進行數據的read讀取和write寫入。通道的讀取,就是將數據從通道讀取到緩衝區中;通道的寫入,就是將數據從緩衝區中寫入到通道中。
緩衝區的使用,是面向流的OIO沒有的,也是NIO非阻塞的重要前提和基礎。
下面你們看下簡單的例子,會對你們的理解更有幫助。
使用OIO的例子:
server端:
client端:
先執行server端,在執行client端,客戶端會收到hello world的信息
BIO的優勢就是代碼很是簡單,可是是阻塞的,真實服務器不可取。
使用NIO的例子:
server端:
client端:
一樣先執行server端,在執行client端,服務端會收到信息。
NIO的代碼會比BIO複雜一些,可是一個線程就是能夠監聽多個連接。增長了效率。線程