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

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ū)別,總體上來(lái)說(shuō)體現(xiàn)在三個(gè)方面:

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

基于 Stream 與基于 Buffer

傳統(tǒng)的 IO 是面向字節(jié)流或字符流的, 而在 NIO 中, 我們拋棄了傳統(tǒng)的 IO 流, 而是引入了 Channel 和 Buffer 的概念。在 NIO 中, 我只能從 Channel 中讀取數(shù)據(jù)到 Buffer 中或?qū)?shù)據(jù)從 Buffer 中寫(xiě)入到 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í)沒(méi)有數(shù)據(jù), 則 read 直接返回, 而不會(huì)阻塞當(dāng)前線程。

selector

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

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

相關(guān)文章

  • Java實(shí)現(xiàn)藍(lán)橋杯數(shù)獨(dú)游戲的示例代碼

    Java實(shí)現(xiàn)藍(lán)橋杯數(shù)獨(dú)游戲的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)藍(lán)橋杯數(shù)獨(dú)游戲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 更改eclipse的JDK版本詳細(xì)步驟

    更改eclipse的JDK版本詳細(xì)步驟

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

    IDEA中osgi的開(kāi)發(fā)應(yīng)用指南詳解

    這篇文章主要介紹了IDEA中osgi的開(kāi)發(fā)應(yīng)用指南詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • Java運(yùn)行Jar包內(nèi)存配置的操作

    Java運(yùn)行Jar包內(nèi)存配置的操作

    這篇文章主要介紹了Java運(yùn)行Jar包內(nèi)存配置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 實(shí)例講解Java的Spring框架中的控制反轉(zhuǎn)和依賴注入

    實(shí)例講解Java的Spring框架中的控制反轉(zhuǎn)和依賴注入

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

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

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

    Java中final關(guān)鍵字和final的4種用法

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

    Java的Channel通道之FileChannel類(lèi)詳解

    這篇文章主要介紹了Java的Channel通道之FileChannel類(lèi)詳解,FileChannel類(lèi)是Java NIO中的一個(gè)重要類(lèi),用于在文件中進(jìn)行讀寫(xiě)操作,它提供了一種高效的方式來(lái)處理大文件和隨機(jī)訪問(wèn)文件的需求,需要的朋友可以參考下
    2023-10-10
  • java中實(shí)現(xiàn)四則運(yùn)算代碼

    java中實(shí)現(xiàn)四則運(yùn)算代碼

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

    Java框架之Maven SSM集合

    本篇文章主要介紹了基于maven的ssm框架整合的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-09-09

最新評(píng)論