最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ó)家法律
大连市| 林西县| 怀安县| 金山区| 泸西县| 平远县| 江口县| 临沭县| 武强县| 资溪县| 涟水县| 唐山市| 郑州市| 大余县| 桓台县| 嘉黎县| 连南| 东明县| 长武县| 淮北市| 凭祥市| 南江县| 山阳县| 襄汾县| 郯城县| 安义县| 新乡县| 图木舒克市| 连州市| 醴陵市| 雅安市| 积石山| 宽甸| 邢台县| 南宫市| 广丰县| 新和县| 陇川县| 彭州市| 横峰县| 富顺县|