javaNIO基礎

java nio是什麼

java1.4版本以後引入了新的io庫,被稱做java New IO類庫,NIO彌補了面向流的OIO同步阻塞的不足,它爲標準Java代碼提供了高速的、面向緩衝區的IO。
如下爲三個核心組件:java

  • Channel(通道)
  • Buffer(緩衝區)
  • Selector(選擇器)

Java NIO使用的是IO多路複用模型。服務器

java NIO和OIO的不一樣

  1. OIO是面向流的,NIO是面向緩衝區的。
  2. OIO的操做是阻塞的,而NIO的操做是非阻塞的。
  3. NIO有選擇器的概念

組件介紹

通道(Channel)

在OIO中,同一個網絡鏈接會關聯到兩個流:一個輸入流(Input Stream),另外一個輸出流(Output Stream)。經過兩個流,不斷地進行輸入和輸出操做。
在NIO中,同一個網絡鏈接使用一個通道標識,全部的NIO的IO操做都是從通道開始的。網絡

選擇器(Selector)

選擇器能夠監聽IO事件,是一個IO事件的查詢器。經過選擇器,一個線程能夠查詢多個通道的IO時間的就緒狀態。
實現IO多路複用,從具體的開發層面說,首先把通道註冊到選擇器中,而後經過選擇器,能夠查詢這些註冊的通道是否有已經就緒的IO事件。spa

緩衝區(Buffer)

應用程序與通道主要的交互操做,就是進行數據的read讀取和write寫入。通道的讀取,就是將數據從通道讀取到緩衝區中;通道的寫入,就是將數據從緩衝區中寫入到通道中。
緩衝區的使用,是面向流的OIO沒有的,也是NIO非阻塞的重要前提和基礎。
下面你們看下簡單的例子,會對你們的理解更有幫助。
使用OIO的例子:
server端:
image.png
client端:
image.png
先執行server端,在執行client端,客戶端會收到hello world的信息
BIO的優勢就是代碼很是簡單,可是是阻塞的,真實服務器不可取。
使用NIO的例子:
server端:
image.png
client端:
image.png
一樣先執行server端,在執行client端,服務端會收到信息。
NIO的代碼會比BIO複雜一些,可是一個線程就是能夠監聽多個連接。增長了效率。線程

相關文章
相關標籤/搜索