欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的NIO與IO的詳解及對比

 更新時間:2017年03月17日 09:31:29   投稿:lqh  
這篇文章主要介紹了Java的NIO與IO的詳解及對比的相關資料,需要的朋友可以參考下

Java的NIO與IO的區(qū)別

NIO是JDK1.4引入的異步IO,NIO核心部分就是三點:

  • Channel
  • Buffer
  • Selector

NIO與IO對比

NIO與IO的區(qū)別,總體上來說體現在三個方面:

  1. IO 基于流(Stream oriented), 而 NIO 基于 Buffer (Buffer oriented)
  2. IO 操作是阻塞的, 而 NIO 操作是非阻塞的
  3. IO 沒有 selector 概念, 而 NIO 有 selector 概念.

基于 Stream 與基于 Buffer

傳統(tǒng)的 IO 是面向字節(jié)流或字符流的, 而在 NIO 中, 我們拋棄了傳統(tǒng)的 IO 流, 而是引入了 Channel 和 Buffer 的概念。在 NIO 中, 我只能從 Channel 中讀取數據到 Buffer 中或將數據從 Buffer 中寫入到 Channel。

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

而 基于 Buffer 就顯得有點不同了. 我們首先需要從 Channel 中讀取數據到 Buffer 中, 當 Buffer 中有數據后, 我們就可以對這些數據進行操作了。不像 IO 那樣是順序操作, NIO 中我們可以隨意地讀取任意位置的數據。

阻塞和非阻塞

Java 提供的各種 Stream 操作都是阻塞的, 例如我們調用一個 read 方法讀取一個文件的內容, 那么調用 read 的線程會被阻塞住, 直到 read 操作完成。而 NIO 的非阻塞模式允許我們非阻塞地進行 IO 操作.。例如我們需要從網絡中讀取數據, 在 NIO 的非阻塞模式中, 當我們調用 read 方法時, 如果此時有數據, 則 read 讀取并返回; 如果此時沒有數據, 則 read 直接返回, 而不會阻塞當前線程。

selector

selector 是 NIO 中才有的概念, 它是 Java NIO 之所以可以非阻塞地進行 IO 操作的關鍵。通過 Selector, 一個線程可以監(jiān)聽多個 Channel 的 IO 事件, 當我們向一個 Selector 中注冊了 Channel 后, Selector 內部的機制就可以自動地為我們不斷地查詢(select) 這些注冊的 Channel 是否有已就緒的 IO 事件(例如可讀, 可寫, 網絡連接完成等)。通過這樣的 Selector 機制, 我們就可以很簡單地使用一個線程高效地管理多個 Channel 了。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Java實現藍橋杯數獨游戲的示例代碼

    Java實現藍橋杯數獨游戲的示例代碼

    這篇文章主要介紹了Java實現藍橋杯數獨游戲的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 更改eclipse的JDK版本詳細步驟

    更改eclipse的JDK版本詳細步驟

    我們用eclipse在做項目的時候會切換jdk版本,本地運行的項目所使用的jdk版本比Linux服務器高(低),需要調低(高)JDK版本,這篇文章主要給大家介紹了關于如何更改eclipse的JDK版本的相關資料,需要的朋友可以參考下
    2023-11-11
  • IDEA中osgi的開發(fā)應用指南詳解

    IDEA中osgi的開發(fā)應用指南詳解

    這篇文章主要介紹了IDEA中osgi的開發(fā)應用指南詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Java運行Jar包內存配置的操作

    Java運行Jar包內存配置的操作

    這篇文章主要介紹了Java運行Jar包內存配置的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 實例講解Java的Spring框架中的控制反轉和依賴注入

    實例講解Java的Spring框架中的控制反轉和依賴注入

    這篇文章主要介紹了Java的Spring框架中的控制反轉和依賴注入,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2016-02-02
  • Jenkins遷移job插件Job Import Plugin流程詳解

    Jenkins遷移job插件Job Import Plugin流程詳解

    這篇文章主要介紹了Jenkins遷移job插件Job Import Plugin流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Java中final關鍵字和final的4種用法

    Java中final關鍵字和final的4種用法

    這篇文章主要給大家分享的是?Java中final關鍵字和final的4種用法修飾類、修飾方法、修飾變量、修飾參數,下面文章具有一定的參考價值,需要的小伙伴可以參考一下
    2021-11-11
  • Java的Channel通道之FileChannel類詳解

    Java的Channel通道之FileChannel類詳解

    這篇文章主要介紹了Java的Channel通道之FileChannel類詳解,FileChannel類是Java NIO中的一個重要類,用于在文件中進行讀寫操作,它提供了一種高效的方式來處理大文件和隨機訪問文件的需求,需要的朋友可以參考下
    2023-10-10
  • java中實現四則運算代碼

    java中實現四則運算代碼

    本文給大家分享了幾個java中實現四則運算的代碼,有個人的也有網友的,代碼寫的不是很好,難免會有BUG,忘發(fā)現BUG的親們能提醒我下,好讓我改進
    2015-08-08
  • Java框架之Maven SSM集合

    Java框架之Maven SSM集合

    本篇文章主要介紹了基于maven的ssm框架整合的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09

最新評論