Java中NIO和IO的比較__Java

來源:互聯網
上載者:User

NIO是為了彌補IO操作的不足而誕生的,NIO的一些新特性有:非阻塞I/O,選取器,緩衝以及管道。管道(Channel),緩衝(Buffer) ,選取器( Selector)是其主要特徵。

概念解釋:


Channel——管道實際上就像傳統IO中的流,到任何目的地(或來自任何地方)的所有資料都必須通過一個 Channel 對象。一個 Buffer 實質上是一個容器物件。

每一種基本 Java 類型都有一種緩衝區類型:

ByteBuffer——byte
CharBuffer——char
ShortBuffer——short
IntBuffer——int
LongBuffer——long
FloatBuffer——float
DoubleBuffer——double

Selector——選取器用於監聽多個管道的事件,使用傳統的阻塞IO時我們可以方便的知道什麼時候可以進行讀寫,而使用非阻塞通道,我們需要一些方法來知道什麼時候通道準備好了,選取器正是為這個需要而誕生的。


NIO和傳統的IO有什麼區別呢?


1,IO是面向流的,NIO是面向塊(緩衝區)的。

IO面向流的操作一次一個位元組地處理資料。一個輸入資料流產生一個位元組的資料,一個輸出資料流消費一個位元組的資料。,導致了資料的讀取和寫入效率不佳;

NIO面向塊的操作在一步中產生或者消費一個資料區塊。按塊處理資料比按(流式的)位元組處理資料要快得多,同時資料讀取到一個它稍後處理的緩衝區,需要時可在緩衝區中前後移動。這就增加了處理過程中的靈活性。通俗來說,NIO採取了“預讀”的方式,當你讀取某一部分資料時,他就會猜測你下一步可能會讀取的資料而預先緩衝下來。


2,IO是阻塞的,NIO是非阻塞的。

對於傳統的IO,當一個線程調用read() 或 write()時,該線程被阻塞,直到有一些資料被讀取,或資料完全寫入。該線程在此期間不能再幹任何事情了。

而對於NIO,使用一個線程發送讀取資料請求,沒有得到響應之前,線程是閒置,此時線程可以去執行別的任務,而不是像IO中那樣只能等待響應完成。


NIO和IO適用情境

NIO是為彌補傳統IO的不足而誕生的,但是尺有所短寸有所長,NIO也有缺點,因為NIO是面向緩衝區的操作,每一次的資料處理都是對緩衝區進行的,那麼就會有一個問題,在資料處理之前必須要判斷緩衝區的資料是否完整或者已經讀取完畢,如果沒有,假設資料唯讀取了一部分,那麼對不完整的資料處理沒有任何意義。所以每次資料處理之前都要檢測緩衝區資料。

那麼NIO和IO各適用的情境是什麼呢。

如果需要管理同時開啟的成千上萬個串連,這些串連每次只是發送少量的資料,例如聊天伺服器,這時候用NIO處理資料可能是個很好的選擇。

而如果只有少量的串連,而這些串連每次要發送大量的資料,這時候傳統的IO更合適。使用哪種處理資料,需要在資料的響應等待時間和檢查緩衝區資料的時間上作比較來權衡選擇。


通俗解釋

最後,對於NIO和傳統IO,有一個網友講的生動的例子:

以前的流總是堵塞的,一個線程只要對它進行操作,其它操作就會被堵塞,也就相當於水管沒有閥門,你伸手接水的時候,不管水到了沒有,你就都只能耗在接水(流)上。

nio的Channel的加入,相當於增加了水龍頭(有閥門),雖然一個時刻也只能接一個水管的水,但依賴輪換策略,在水量不大的時候,各個水管裡流出來的水,都可以得到妥

善接納,這個關鍵之處就是增加了一個接水工,也就是Selector,他負責協調,也就是看哪根水管有水了的話,在當前水管的水接到一定程度的時候,就切換一下:臨時關上當

前水龍頭,試著開啟另一個水龍頭(看看有沒有水)。

當其他人需要用水的時候,不是直接去接水,而是事前提了一個水桶給接水工,這個水桶就是Buffer。也就是,其他人雖然也可能要等,但不會在現場等,而是回家等,可以做

其它事去,水接滿了,接水工會通知他們。

這其實也是非常接近當前社會分工細化的現實,也是統分利用現有資源達到並發效果的一種很經濟的手段,而不是動不動就來個平行處理,雖然那樣是最簡單的,但也是最浪費

資源的方式。






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.