這篇文章主要介紹了Java的NIO與IO的詳解及對比的相關資料,需要的朋友可以參考下
Java的NIO與IO的區別
NIO是JDK1.4引進的非同步IO,NIO核心部分就是三點:
Channel
NIO與IO對比
NIO與IO的區別,整體來說體現在三個方面:基於Stream與基於Buffer
傳統的IO 是面向字節流或字元流的, 而在NIO 中, 我們拋棄了傳統的IO 流, 而是引入了Channel 和Buffer 的概念。在 NIO 中, 我只能從 Channel 中讀取資料到 Buffer 中或將資料從 Buffer 寫入到 Channel。 那麼什麼是基於流呢? 在一般的Java IO 操作中, 我們以流式的方式順序地從一個Stream 中讀取一個或多個字節, 因此我們也就不能隨意改變讀取指針的位置。不像 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中文網其他相關文章!