91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中的NIO與IO有什么不同

發布時間:2020-11-12 15:34:07 來源:億速云 閱讀:149 作者:Leah 欄目:編程語言

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有什么不同問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浮山县| 凌源市| 建水县| 磐安县| 涪陵区| 张北县| 葵青区| 中方县| 远安县| 邢台县| 井冈山市| 林西县| 曲靖市| 天镇县| 沅陵县| 和田县| 喀喇沁旗| 东兰县| 澄城县| 平陆县| 北宁市| 灌南县| 萝北县| 临泉县| 汽车| 台东市| 昌都县| 雷山县| 宁南县| 五指山市| 邢台市| 类乌齐县| 峨眉山市| 鄄城县| 娄烦县| 陇西县| 浮梁县| 黔南| 桃源县| 中超| 金湖县|