首頁 > Java > java教程 > 主體

Java的NIO與IO的比較詳細介紹

黄舟
發布: 2017-03-17 10:05:32
原創
1196 人瀏覽過

這篇文章主要介紹了Java的NIO與IO的詳解及對比的相關資料,需要的朋友可以參考下

Java的NIO與IO的區別

NIO是JDK1.4引進的非同步IO,NIO核心部分就是三點:

  • Channel

  • ##Buffer

  • #Selector


NIO與IO對比

NIO與IO的區別,整體來說體現在三個方面:

  1. IO 基於流(Stream oriented), 而NIO 基於Buffer (Buffer oriented)

  2. IO 操作是阻塞的, 而NIO 操作是非阻塞的

  3. IO 沒有selector 概念, 而NIO 有selector 概念.


基於Stream與基於Buffer

傳統的IO 是面向字節流或字元流的, 而在NIO 中, 我們拋棄了傳統的IO 流, 而是引入了Channel 和Buffer 的概念。在 NIO 中, 我只能從 Channel 中讀取資料到 Buffer 中或將資料從 Buffer 寫入到 Channel。

那麼什麼是基於流呢? 在一般的Java IO 操作中, 我們以流式的方式順序地從一個Stream 中讀取一個或多個字節, 因此我們也就不能隨意改變讀取指針的位置。


而 基於 Buffer 就顯得有點不同了. 我們首先需要從 Channel 讀取資料到 Buffer 中, 當 Buffer 中有資料後, 我們就可以對這些資料進行操作了。

不像 IO 那樣是順序操作, NIO 中我們可以隨意地讀取任意位置的資料。

阻塞和非阻塞

Java 提供的各種Stream 操作都是阻塞的, 例如我們呼叫一個read 方法讀取一個檔案的內容,那麼呼叫read 的執行緒會被阻塞住, 直到read 操作完成。而 NIO 的非阻塞模式允許我們非阻塞地進行 IO 操作.。例如我們需要從網路中讀取資料, 在NIO 的非阻塞模式中, 當我們呼叫read 方法時, 如果此時有資料, 則read 讀取並傳回; 如果此時沒有資料, 則read 直接回傳, 而不會阻塞當前線程。

selector

selector 是 NIO 中才有的概念, 它是 Java NIO 之所以可以非阻塞地進行 IO 操作的關鍵。

透過Selector, 一個執行緒可以監聽多個Channel 的IO 事件, 當我們向一個Selector 註冊了Channel 後, Selector 內部的機制就可以自動地為我們不斷地查詢(select) 這些註冊的Channel 是否有已就緒的IO 事件(例如可讀, 可寫, 網路連線完成等)。透過這樣的 Selector 機制, 我們就可以很簡單地使用一個執行緒有效率地管理多個 Channel 了。

以上是Java的NIO與IO的比較詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!