第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

關(guān)于FileOutputStream,DataOutputStream,BufferedOutputStream的理解對(duì)錯(cuò)

老師說(shuō):

FileOutputStream--->write方法,相當(dāng)于一滴一滴把水“轉(zhuǎn)移”過(guò)去
DataOutputStream--->writexxx(如writeInt)方法,會(huì)方便一些,相當(dāng)于一瓢一瓢“轉(zhuǎn)移”水
BufferedOutputStream--->writexxx()方法,更方便,相當(dāng)于一瓢一瓢水先放入桶(緩沖區(qū))中,然后直接把桶里水倒入缸中

我聽(tīng)著反而有點(diǎn)怪,因?yàn)橥瑯邮且黄耙黄?,這緩沖區(qū)不是反而還多個(gè)桶倒入缸的過(guò)程,不是更慢么?

我就自己理解成這兩個(gè)缸中間加一段距離,也就是說(shuō)本來(lái)都是一滴一滴,或者一瓢一瓢,拿起水走到另一個(gè)缸旁邊把水倒進(jìn)去,而緩沖區(qū)就是多了個(gè)桶,可以在這邊的缸旁邊一瓢一瓢把桶裝滿(mǎn),然后提著桶過(guò)去倒水,也就是路上走的路程少了,節(jié)約的時(shí)間是從這里體現(xiàn)出來(lái)的?

正在回答

3 回答

首先暫且不看你說(shuō)的問(wèn)題,我們先來(lái)說(shuō)明一個(gè)關(guān)于用時(shí)的問(wèn)題:

在文件的拷貝過(guò)程中,最耗時(shí)的就是IO操作,也就是取 或者存進(jìn)文件的過(guò)程最耗時(shí),(也就是從水缸中取或者放水的過(guò)程,反而運(yùn)送的過(guò)程不算耗時(shí)。)

所以對(duì)于你的問(wèn)題,我相信你關(guān)于一滴一滴 和一瓢一瓢你是沒(méi)有問(wèn)題的,因?yàn)橐黄耙黄帮@然取的次數(shù)比一滴一滴的少。你所不能理解的就是緩沖區(qū)同樣是一瓢一瓢的,而且還增加了倒入桶的過(guò)程,但是為什么還要比DataOutputStream--->writexxx(如writeInt)方法快一些,其實(shí)準(zhǔn)確來(lái)說(shuō),應(yīng)該是一次取一個(gè)緩沖區(qū)那么大小的文件,也就是一桶一桶的?。ú挥闷?,直接上桶從缸中取水),裝滿(mǎn)緩沖區(qū)(桶)然后才運(yùn)送一次。如果說(shuō)你非要理解為一瓢一瓢的取也可以說(shuō)得過(guò)去,那么就是我們倒入缸中的時(shí)候,是一桶一桶倒進(jìn)去的。那么自然就IO次數(shù)少了。


關(guān)于用時(shí)7毫秒的批量處理,可以理解為直接把水從一個(gè)缸倒入另一個(gè)缸,因?yàn)槭前阉形募?xiě)進(jìn)內(nèi)存然后再一次性寫(xiě)入文件的。


希望我的回答可以幫助你。

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

特地學(xué)java 提問(wèn)者

非常感謝!
2016-03-03 回復(fù) 有任何疑惑可以回復(fù)我~
#2

怒放的生命012

這里的buffer可不可以理解成Stringbuffer中的buffer???
2016-07-01 回復(fù) 有任何疑惑可以回復(fù)我~

這個(gè)問(wèn)題首先要明白,讀取和寫(xiě)入的過(guò)程;

知道運(yùn)行內(nèi)存吧???計(jì)算機(jī)為什么要運(yùn)行內(nèi)存呢???其實(shí)運(yùn)行內(nèi)存就是一個(gè)緩沖區(qū)!!

文件的讀取和寫(xiě)入操作的過(guò)程是這樣的:

(1)首先說(shuō)一下批量讀取和單個(gè)字節(jié)的讀取

批量讀取是new一個(gè)對(duì)象,new一個(gè)對(duì)象就是在內(nèi)存中申請(qǐng)一個(gè)和new的要求的大小相一致的運(yùn)行內(nèi)存;

單個(gè)讀取系統(tǒng)默認(rèn)申請(qǐng)了一個(gè)字節(jié)的運(yùn)行內(nèi)存;

(2)文件的讀取和寫(xiě)入

?1.先說(shuō)單個(gè)字節(jié)的讀取,從原文件中讀取一個(gè)字節(jié)放入到內(nèi)存中,再?gòu)膬?nèi)存中把一個(gè)字節(jié)大小的數(shù)據(jù)放入到目標(biāo)文件中;(強(qiáng)調(diào)一次操作必須是直接從源文件到內(nèi)存再到目標(biāo)文件, 才能再次讀取下個(gè)字節(jié))

2.再說(shuō)批量讀取,同理

從原文件中讀取多個(gè)字節(jié)放入到內(nèi)存中,再?gòu)膬?nèi)存中把多個(gè)字節(jié)大小的數(shù)據(jù)放入到目標(biāo)文件中;(強(qiáng)調(diào)一次操作必須是直接從源文件到內(nèi)存再到目標(biāo)文件, 才能再次讀取下多字節(jié))

(3)從2中我們就能理解Buffer的運(yùn)行機(jī)制了,開(kāi)始解釋?zhuān)ㄔ購(gòu)?qiáng)調(diào)一下運(yùn)存既是緩存區(qū))

buffer的單個(gè)讀取,同理讀取既是先讀取一個(gè)字節(jié)放入內(nèi)存中,在讀取一個(gè)字節(jié)中,直到讀取完整個(gè)文件,批量從緩存中放到目標(biāo)文件中,可以看粗這樣節(jié)省了一次一次的從內(nèi)存中到目標(biāo)文件的過(guò)程即(1——》2——》3變成了1——》3,這樣從需要花費(fèi)2步,變成只花費(fèi)了一步,所以buffer的性能應(yīng)該是正常的一倍)

buffer的批量讀取,同理讀取既是先讀取多個(gè)字節(jié)放入內(nèi)存中,在讀取多個(gè)字節(jié)中,直到讀取完整個(gè)文件,批量從緩存中放到目標(biāo)文件中,可以看粗這樣節(jié)省了一次一次的從內(nèi)存中到目標(biāo)文件的過(guò)程即(1——》2——》3變成了1——》3,這樣從需要花費(fèi)2步,變成只花費(fèi)了一步,所以buffer的性能應(yīng)該是正常的一倍)

(4)總結(jié),累死我了,以上內(nèi)容純屬自己瞎想,沒(méi)有驗(yàn)證,求大神驗(yàn)證,告訴我答案,

? ? 我是渣渣,我是新手,驗(yàn)證發(fā)現(xiàn)我說(shuō)的錯(cuò)了,請(qǐng)不要罵我,xiexie


0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

染紅_街道

但是fileoutputstream 不是有 read(byte【】 b) 方法嗎?他不是一次性讀取很多, 怎么還會(huì)慢?? 還有一次全讀完再寫(xiě)會(huì)怎樣? randomAccessFile 的讀寫(xiě)與這幾個(gè)比較有啥區(qū)別
2016-07-03 回復(fù) 有任何疑惑可以回復(fù)我~

也就是說(shuō)其實(shí)加上緩沖區(qū),它用的已經(jīng)不是和DataOutputStream一樣的瓢了,它相當(dāng)于用一個(gè)型號(hào)更大的東西舀水再倒。

或者假定都是瓢,系統(tǒng)耗時(shí)主要在于兩個(gè)地方:1.從缸里取水,不管是一滴還是一瓢,2.往缸里倒水,同樣不管一滴還是一瓢。DataOutputStream與BufferedOutputStream在取水過(guò)程中,耗時(shí)一樣,都是一瓢一瓢取水,但是在倒水過(guò)程中,前者還是一瓢一瓢倒水,后者則換成了一桶一桶倒水,也就是節(jié)約的時(shí)間在于倒水的過(guò)程

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

關(guān)于FileOutputStream,DataOutputStream,BufferedOutputStream的理解對(duì)錯(cuò)

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)