麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

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

2019-11-06 06:07:43
字體:
供稿:網(wǎng)友

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

ChannelBufferSelector

NIO與IO對比

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

IO 基于流(Stream oriented), 而 NIO 基于 Buffer (Buffer oriented)IO 操作是阻塞的, 而 NIO 操作是非阻塞的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 操作中, 我們以流式的方式順序地從一個 Stream 中讀取一個或多個字節(jié), 因此我們也就不能隨意改變讀取指針的位置。 而 基于 Buffer 就顯得有點不同了. 我們首先需要從 Channel 中讀取數(shù)據(jù)到 Buffer 中, 當(dāng) Buffer 中有數(shù)據(jù)后, 我們就可以對這些數(shù)據(jù)進(jìn)行操作了。不像 IO 那樣是順序操作, NIO 中我們可以隨意地讀取任意位置的數(shù)據(jù)。

阻塞和非阻塞

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

selector

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 日本教室三级在线看 | 日韩剧情片 | 日本欧美一区二区三区在线观看 | 毛片成人网 | 成码无人av片在线观看网站 | 日本在线免费观看视频 | 国产精品久久久久久久av三级 | 成人福利视频网站 | 国产色妞影院wwwxxx | 免费a级黄色片 | 欧美性受xxxx白人性爽 | 午夜小电影 | 成人免费区 | 毛片在哪里看 | 日韩精品中文字幕一区二区 | 国产91一区二区三区 | 久久99精品国产 | 欧美特黄特色视频 | 特级a欧美做爰片毛片 | 成人在线视频免费播放 | 久久国产精品二区 | 欧美成人理论片乱 | 91精品免费在线 | 黄网站在线免费看 | 欧美淫交 | av不卡免费在线观看 | 最新黄色毛片 | 免费观看视频91 | 91短视频在线观看视频 | 超碰97国产在线 | 国产91精品久久久久久久 | 女人裸体让男人桶全过程 | 九九热在线观看视频 | 毛片免费一区二区三区 | 久久久精品精品 | 一二区电影 | 成人免费看毛片 | 999久久久精品 | 国产精品久久久久久久hd | 羞羞网站视频 | 国产黄色网页 |