創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)提供從項(xiàng)目策劃、軟件開發(fā),軟件安全維護(hù)、網(wǎng)站優(yōu)化(SEO)、網(wǎng)站分析、效果評估等整套的建站服務(wù),主營業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),App定制開發(fā)以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。創(chuàng)新互聯(lián)建站深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!Java中的NIO與IO有什么不同?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
Java的NIO與IO的區(qū)別
NIO是JDK1.4引入的異步IO,NIO核心部分就是三點(diǎn):
NIO與IO對比
NIO與IO的區(qū)別,總體上來說體現(xiàn)在三個(gè)方面:
基于 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ù)后, 我們就可以對這些數(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 中注冊了 Channel 后, Selector 內(nèi)部的機(jī)制就可以自動(dòng)地為我們不斷地查詢(select) 這些注冊的 Channel 是否有已就緒的 IO 事件(例如可讀, 可寫, 網(wǎng)絡(luò)連接完成等)。通過這樣的 Selector 機(jī)制, 我們就可以很簡單地使用一個(gè)線程高效地管理多個(gè) Channel 了。
關(guān)于Java中的NIO與IO有什么不同問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道了解更多相關(guān)知識。