色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java NIO教程 前言

瀏覽:5日期:2022-09-06 11:18:37

NIO 是 New I/O 的縮寫,要了解它真正的內(nèi)涵,需要掌握的知識(shí)還是比較多的。我努力在這幾篇筆記里,勾勒出整個(gè)io的面貌。為大家的深入學(xué)習(xí)鋪路。

I/O簡(jiǎn)史

想理解I/O的全部,java的I/O歷史是必須要了解的。java的I/O歷史也從一個(gè)側(cè)面反應(yīng)了java的發(fā)展史。

JDK1.0-1.3

在這個(gè)時(shí)期的java中,基本上可以說(shuō)沒(méi)有完整的I/O支持。因?yàn)檫@一時(shí)期的java I/O操作是阻塞的,所以I/O效率是較為底下的,基本上想要有比較好的I/O解決方案,基本靠自己。這時(shí)期java在服務(wù)器端一直沒(méi)有得到重用,和糟糕的I/O效率是有很大的關(guān)系的。不但I(xiàn)/O弄的不好,而且一系列周邊措施都沒(méi)弄好。所支持的字符集編碼有限,經(jīng)常要進(jìn)行手工的編碼工作。而且沒(méi)有正則表達(dá)式,處理數(shù)據(jù)十分困難。

JDK1.4-1.6

2002年發(fā)布的java1.4中,非阻塞I/O以JSR-51的身份加入到j(luò)ava語(yǔ)言中。同時(shí)字符集的編解碼能力大大提升。而且有了基于perl實(shí)現(xiàn)的正則表達(dá)式類庫(kù)。同時(shí)部分舊I/O底層實(shí)現(xiàn),也用新I/O的方式重寫,使得舊I/O的性能也有了提升。終于java在服務(wù)器端開(kāi)始流行了起來(lái)。

與此同時(shí),第三方也開(kāi)始發(fā)力。谷歌發(fā)布了Guava類庫(kù),其中的I/O部分,極大的簡(jiǎn)化了一些文件的操作和數(shù)據(jù)的傳輸。同時(shí)Trustin Lee領(lǐng)導(dǎo)編寫的nio框架netty與mina也廣為流傳開(kāi)來(lái),這對(duì)java nio的發(fā)展業(yè)是有著極大的推動(dòng)力的。

JDK1.7至今

隨著JSR-203的推出,是我們?cè)趈ava1.7中見(jiàn)到了NIO2。它為我們提供了必非阻塞更加強(qiáng)大的異步I/O操作能力,同時(shí)提供了一系列極為方便的對(duì)文件系統(tǒng)和文件屬性進(jìn)行操作的API。以及更加強(qiáng)大的網(wǎng)絡(luò)I/O

I/O區(qū)別

阻塞I/O、非阻塞I/O、異步I/O之間到底有什么區(qū)別?為什么每一次的進(jìn)步,都會(huì)促使java I/O能力的極大提升?我們舉一個(gè)種菜游戲的例子。

假如有一個(gè)種菜游戲(就跟之前的QQ農(nóng)場(chǎng)類似),在玩家種菜以后,必須一直呆在那個(gè)網(wǎng)頁(yè)上,看著菜成熟,才可以收菜。這是極其浪費(fèi)時(shí)間的,用戶體驗(yàn)也一定不會(huì)好。這個(gè)游戲后來(lái)進(jìn)行了改版,玩家種菜之后不用再一直停留在那個(gè)網(wǎng)頁(yè)上了,只是需要時(shí)不時(shí)來(lái)看一遍,如果某一次查看時(shí)發(fā)現(xiàn)菜成熟了,就可以收菜了。當(dāng)然,用戶體驗(yàn)極大的提升了,用戶所浪費(fèi)的時(shí)間也減少了,但是為了更加提升用戶體驗(yàn),游戲又進(jìn)行了改版。玩家種菜之后,不用再查看菜是否成熟了,等到菜成熟后,該游戲會(huì)自動(dòng)給用戶發(fā)送一個(gè)通知,告訴他,菜已成熟、趕緊來(lái)收。這樣用戶的基本上再也不用浪費(fèi)時(shí)間了。

剛剛例子中的三個(gè)游戲版本,代表了三種I/O。阻塞I/O:在數(shù)據(jù)沒(méi)有讀寫完成之前,CPU不可以進(jìn)行下一步操作,這樣CPU只好眼睜睜的在那里傻等。非阻塞I/O:在數(shù)據(jù)沒(méi)有讀寫完成之前,CPU可以離開(kāi),只需要每隔一段時(shí)間詢問(wèn)一次。異步I/O:在數(shù)據(jù)沒(méi)有讀寫完成之前,CPU可以離開(kāi)也不用時(shí)不時(shí)的關(guān)心一下I/O,在數(shù)據(jù)讀寫完成時(shí),主動(dòng)通知CPU。三種I/O之間的效率,高低立判。

新I/O

咱們以java1.4所提出的非阻塞I/O,為切入點(diǎn),開(kāi)始了解全貌。

ChannelsBuffersSelectors

這三個(gè)類構(gòu)成了非阻塞I/O的核心API。

Buffer譯為緩存區(qū),它是一塊可以存儲(chǔ)數(shù)據(jù)的內(nèi)存。Channel有點(diǎn)像流,但它可讀可寫、從本地I/O到網(wǎng)絡(luò)I/O都可以,絕大多數(shù)NIO都從一個(gè)Channel開(kāi)始的,數(shù)據(jù)可以從Channel讀到Buffer中,也可以從Buffer 寫到Channel中。Java NIO教程 前言非阻塞I/O中,CPU可以在數(shù)據(jù)沒(méi)有讀寫完成之前離開(kāi),只需要每隔一段時(shí)間詢問(wèn)一次。詢問(wèn)數(shù)據(jù)是否讀寫完成,需要的CPU能力是極小的,但如果CPU經(jīng)常切換任務(wù)所需要的保留現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)的時(shí)間是較大的。所以可以就用一個(gè)線程來(lái)詢問(wèn)數(shù)據(jù)是否準(zhǔn)備好。一個(gè)線程在多個(gè)通道內(nèi)詢問(wèn)數(shù)據(jù)是否準(zhǔn)備好,就需要管理多個(gè)通道的方式,這就是Java NIO教程 前言。使用Selector,得向Selector注冊(cè)Channel,然后調(diào)用它的select()方法。這個(gè)方法會(huì)一直阻塞到某個(gè)注冊(cè)的通道有事件就緒。一旦這個(gè)方法返回,線程就可以處理這些事件。

說(shuō)了這么多,我們?cè)搹氖裁吹胤介_(kāi)始呢? 咱們從java7的新文件系統(tǒng)開(kāi)始吧

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: tom影院亚洲国产日本一区 | 京野结衣免费一区二区 | 一级毛片免费观看视频 | 亚洲精品一区二区四季 | 亚洲悠悠色综合中文字幕 | 久久精品国产亚洲欧美 | 蝴蝶成人世界第八影院 | 又黄又刺激下面流水的视频 | 99爱视频精品免视看 | 亚洲视频1区| 亚洲国产精品久久久久秋霞不卡 | 国产自在自线午夜精品视频在 | 国产手机在线国内精品 | 欧美另类精品一区二区三区 | 三级c欧美做人爱视频 | 一区二区三区在线 | 欧 | 香蕉tv亚洲专区在线观看 | 婷婷丁香久久 | 欧美精品午夜毛片免费看 | 亚洲精品国产精品一区二区 | 99精品国产成人一区二区在线 | 一级一级 a爱片免费视频 | 久久免费视频7 | 亚洲午夜精品一区二区 | 成人毛片免费看 | 国产一级免费片 | 免费观看欧美一级特黄 | 久久亚洲精品无码观看不卡 | 亚洲影院在线播放 | 欧美在线三级 | 亚洲一区二区三区久久精品 | 国产精品午夜性视频网站 | 亚洲精品综合久久中文字幕 | 久草免费看 | 九九视频在线观看视频23 | 欧美黄视频在线观看 | 免费视频观看在线www日本 | 欧美视频一区二区三区 | 欧美与黑人午夜性猛交久久久 | 成人免费一区二区三区在线观看 | 国产99久9在线视频 国产99久久 |