国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java中NIO和BIO文件讀寫(xiě)的效率和選擇問(wèn)題

2023-08-03 20:03 作者:L-MER  | 我要投稿

今天在面試的時(shí)候,面試官問(wèn)了這樣一個(gè)問(wèn)題:


請(qǐng)說(shuō)一下Java中NIO與BIO的區(qū)別,并描述一下如何通過(guò)NIO進(jìn)行一個(gè)圖片的讀寫(xiě)


第一個(gè)問(wèn)題的話,在網(wǎng)絡(luò)很容易就可以得到答案了,所以在這里就不進(jìn)行回答了。


側(cè)重放到第二個(gè)問(wèn)題上來(lái),這個(gè)問(wèn)題在當(dāng)時(shí)問(wèn)到的時(shí)候第一時(shí)間沒(méi)有反應(yīng)過(guò)來(lái)。因?yàn)橹詴?huì)問(wèn)這個(gè)問(wèn)題是在簡(jiǎn)歷上寫(xiě)了Netty相關(guān)的技術(shù),在Netty中主要應(yīng)用的就是NIO實(shí)現(xiàn)高效的網(wǎng)絡(luò)IO。所以對(duì)于文件的NIO沒(méi)有印象了,也沒(méi)有g(shù)et到面試官問(wèn)這個(gè)的點(diǎn)是啥。


對(duì)于NIO而言,有幾個(gè)關(guān)鍵的組件:

  1. Channel

  2. ByteBuff

Channel是一個(gè)比Stream更加底層的組件。對(duì)于操作系統(tǒng)的IO而言,當(dāng)用戶應(yīng)用程序需要實(shí)現(xiàn)IO的時(shí)候,一般來(lái)說(shuō)需要操作系統(tǒng)先將磁盤(pán)內(nèi)容寫(xiě)入到系統(tǒng)內(nèi)存中,然后是由系統(tǒng)內(nèi)存寫(xiě)入到用戶內(nèi)存,此時(shí)這個(gè)數(shù)據(jù)才能由應(yīng)用程序完全控制。


首先先展示一下BIO和NIO兩種不同的文件讀寫(xiě)方式:

對(duì)這兩個(gè)方法進(jìn)行測(cè)試查看一下需要的時(shí)間(測(cè)試的文件大小為700Mb,另外需要注意byte數(shù)組以及ByteBuff的大小,大文件傳輸不要設(shè)置的太小了)

  1. NIO :29145ms

  2. BIO :29058ms


可以看到幾乎沒(méi)有差距,其實(shí)這個(gè)是完全意料之中的。因?yàn)镹IO的優(yōu)勢(shì)不在于傳輸效率,而是能夠利用IO過(guò)程中一些等待的時(shí)間。在文件傳輸?shù)臅r(shí)候,在讀寫(xiě)過(guò)程中,線程是基本一直在工作的。


也就是說(shuō):FileChannel是完全工作在阻塞模式下的


至于如何實(shí)現(xiàn)更高效的傳輸,需要用到channel的一個(gè)transfer方法

這個(gè)方法測(cè)試下來(lái)的一個(gè)時(shí)間為:21531ms,可以看到效率還是由比較明顯的提升的,這個(gè)主要還是歸功于類似于0拷貝的思想(關(guān)于0拷貝的內(nèi)容網(wǎng)上同樣可以找到大量資料,此處也不做描述了)。如果要做文件的傳輸?shù)脑捒隙ㄊ沁x擇這個(gè)方法更好,但是之前確實(shí)沒(méi)有見(jiàn)到過(guò)相關(guān)的內(nèi)容,所以這個(gè)面試回答也沒(méi)有答上來(lái)了。


這篇文章主要還是回憶回憶NIO的東西,畢竟感覺(jué)在文件讀寫(xiě)上這方面的還是運(yùn)用的比較少,然后順便測(cè)試一下做個(gè)記錄。


下次再見(jiàn)嘍0v0


Java中NIO和BIO文件讀寫(xiě)的效率和選擇問(wèn)題的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
科尔| 临湘市| 准格尔旗| 威海市| 广河县| 乌拉特后旗| 南华县| 东乌| 奉贤区| 永德县| 云龙县| 荃湾区| 塔城市| 鹤庆县| 龙南县| 石台县| 江阴市| 凤山市| 洛南县| 岑溪市| 吉首市| 云霄县| 五大连池市| 揭东县| 新干县| 易门县| 红安县| 合肥市| 梨树县| 临夏市| 松潘县| 呼玛县| 甘谷县| 来凤县| 壶关县| 改则县| 新沂市| 安义县| 三都| 辰溪县| 北碚区|