最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java的NIO與IO的詳解及對(duì)比

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

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

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

  • Channel
  • Buffer
  • Selector

NIO與IO對(duì)比

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

  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 中讀取數(shù)據(jù)到 Buffer 中或?qū)?shù)據(jù)從 Buffer 中寫入到 Channel。

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

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

阻塞和非阻塞

Java 提供的各種 Stream 操作都是阻塞的, 例如我們調(diào)用一個(gè) read 方法讀取一個(gè)文件的內(nèi)容, 那么調(diào)用 read 的線程會(huì)被阻塞住, 直到 read 操作完成。而 NIO 的非阻塞模式允許我們非阻塞地進(jìn)行 IO 操作.。例如我們需要從網(wǎng)絡(luò)中讀取數(shù)據(jù), 在 NIO 的非阻塞模式中, 當(dāng)我們調(diào)用 read 方法時(shí), 如果此時(shí)有數(shù)據(jù), 則 read 讀取并返回; 如果此時(shí)沒有數(shù)據(jù), 則 read 直接返回, 而不會(huì)阻塞當(dāng)前線程。

selector

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

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

相關(guān)文章

  • mybatis-plus動(dòng)態(tài)表名實(shí)現(xiàn)方法

    mybatis-plus動(dòng)態(tài)表名實(shí)現(xiàn)方法

    本文主要介紹了mybatis-plus動(dòng)態(tài)表名實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java漢字轉(zhuǎn)拼音pinyin4j用法詳解

    Java漢字轉(zhuǎn)拼音pinyin4j用法詳解

    這篇文章主要介紹了Java漢字轉(zhuǎn)拼音pinyin4j用法詳解,需要的朋友可以參考下
    2020-02-02
  • Java8深入學(xué)習(xí)之熟透Optional

    Java8深入學(xué)習(xí)之熟透Optional

    這篇文章主要給大家介紹了關(guān)于Java8深入學(xué)習(xí)之熟透Optional的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Maven依賴作用域和依賴傳遞的使用

    Maven依賴作用域和依賴傳遞的使用

    本文主要介紹了Maven依賴作用域和依賴傳遞的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java創(chuàng)建線程的五種寫法總結(jié)

    Java創(chuàng)建線程的五種寫法總結(jié)

    本文主要為大家詳細(xì)介紹一下Java實(shí)現(xiàn)線程創(chuàng)建的五種寫法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的幫助,感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-08-08
  • java實(shí)現(xiàn)上傳文件類型檢測(cè)過程解析

    java實(shí)現(xiàn)上傳文件類型檢測(cè)過程解析

    這篇文章主要介紹了java實(shí)現(xiàn)上傳文件類型檢測(cè)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Spring Cloud Ubuntu環(huán)境部署的步驟與注意事項(xiàng)

    Spring Cloud Ubuntu環(huán)境部署的步驟與注意事項(xiàng)

    這篇文章主要給大家介紹了關(guān)于Spring Cloud Ubuntu環(huán)境部署的步驟與注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Cloud具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 永久解決idea git log亂碼的問題

    永久解決idea git log亂碼的問題

    這篇文章主要介紹了永久解決idea git log亂碼的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot配置Spring Native的詳細(xì)步驟

    SpringBoot配置Spring Native的詳細(xì)步驟

    配置 Spring Native 以減少 Spring Boot 應(yīng)用的啟動(dòng)時(shí)間,涉及幾個(gè)關(guān)鍵步驟,包括設(shè)置相應(yīng)的依賴、配置文件以及構(gòu)建過程,本文給大家就介紹了詳細(xì)的步驟和配置示例,需要的朋友可以參考下
    2024-11-11
  • 淺談HashMap、HashTable的key和value是否可為null

    淺談HashMap、HashTable的key和value是否可為null

    這篇文章主要介紹了淺談HashMap、HashTable的key和value是否可為null,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論

永仁县| 扎囊县| 玉田县| 莲花县| 邹城市| 凤山市| 土默特右旗| 洪泽县| 滨海县| 大洼县| 应城市| 安吉县| 邢台市| 沁阳市| 盖州市| 宕昌县| 株洲县| 会昌县| 武义县| 固原市| 朝阳市| 工布江达县| 江城| 兴宁市| 桦川县| 和政县| 滨州市| 靖州| 吉首市| 延庆县| 涟源市| 出国| 西平县| 哈巴河县| 开封县| 大厂| 延津县| 平昌县| 厦门市| 平武县| 朝阳县|