byte[]讀取和Buffered讀取是不是一直是byte讀取快
之前看老師試了copyFile 和copyFileByBuffered,發(fā)現(xiàn)copyFile要快,然后自己去測試,就發(fā)現(xiàn)
讀取速度byte[] buf=new byte[8*1024];和這個有關(guān),我往上調(diào)了,那么這兩個優(yōu)劣在哪里
之前看老師試了copyFile 和copyFileByBuffered,發(fā)現(xiàn)copyFile要快,然后自己去測試,就發(fā)現(xiàn)
讀取速度byte[] buf=new byte[8*1024];和這個有關(guān),我往上調(diào)了,那么這兩個優(yōu)劣在哪里
2016-04-03
舉報
2016-04-12
同樣條件下,是應(yīng)該Buffer比普通的讀取快,但不是最快的,最快是用FileInputStream的getChannel()方法去讀取。你可以運(yùn)行下面的那段代碼去對比下就知道了。
下面是運(yùn)行結(jié)果:
運(yùn)行copy file 的普通方法需要的時間是: 94毫秒
運(yùn)行copy file 的buffer普通方法需要的時間是: 62毫秒
運(yùn)行copy file 的getChannel()方法需要的時間是: 16毫秒
2016-07-01
這個問題首先要明白,讀取和寫入的過程;
知道運(yùn)行內(nèi)存吧???計(jì)算機(jī)為什么要運(yùn)行內(nèi)存呢???其實(shí)運(yùn)行內(nèi)存就是一個緩沖區(qū)!!
文件的讀取和寫入操作的過程是這樣的:
(1)首先說一下批量讀取和單個字節(jié)的讀取
批量讀取是new一個對象,new一個對象就是在內(nèi)存中申請一個和new的要求的大小相一致的運(yùn)行內(nèi)存;
單個讀取系統(tǒng)默認(rèn)申請了一個字節(jié)的運(yùn)行內(nèi)存;
(2)文件的讀取和寫入
?1.先說單個字節(jié)的讀取,從原文件中讀取一個字節(jié)放入到內(nèi)存中,再從內(nèi)存中把一個字節(jié)大小的數(shù)據(jù)放入到目標(biāo)文件中;(強(qiáng)調(diào)一次操作必須是直接從源文件到內(nèi)存再到目標(biāo)文件, 才能再次讀取下個字節(jié))
2.再說批量讀取,同理
從原文件中讀取多個字節(jié)放入到內(nèi)存中,再從內(nèi)存中把多個字節(jié)大小的數(shù)據(jù)放入到目標(biāo)文件中;(強(qiáng)調(diào)一次操作必須是直接從源文件到內(nèi)存再到目標(biāo)文件, 才能再次讀取下多字節(jié))
(3)從2中我們就能理解Buffer的運(yùn)行機(jī)制了,開始解釋(再強(qiáng)調(diào)一下運(yùn)存既是緩存區(qū))
buffer的單個讀取,同理讀取既是先讀取一個字節(jié)放入內(nèi)存中,在讀取一個字節(jié)中,直到讀取完整個文件,批量從緩存中放到目標(biāo)文件中,可以看粗這樣節(jié)省了一次一次的從內(nèi)存中到目標(biāo)文件的過程即(1——》2——》3變成了1——》3,這樣從需要花費(fèi)2步,變成只花費(fèi)了一步,所以buffer的性能應(yīng)該是正常的一倍)
buffer的批量讀取,同理讀取既是先讀取多個字節(jié)放入內(nèi)存中,在讀取多個字節(jié)中,直到讀取完整個文件,批量從緩存中放到目標(biāo)文件中,可以看粗這樣節(jié)省了一次一次的從內(nèi)存中到目標(biāo)文件的過程即(1——》2——》3變成了1——》3,這樣從需要花費(fèi)2步,變成只花費(fèi)了一步,所以buffer的性能應(yīng)該是正常的一倍)
(4)總結(jié),累死我了,以上內(nèi)容純屬自己瞎想,沒有驗(yàn)證,求大神驗(yàn)證,告訴我答案,
? ? 我是渣渣,我是新手,驗(yàn)證發(fā)現(xiàn)我說的錯了,請不要罵我,xiexie
2016-04-05
我認(rèn)為buffered緩沖與byte[]數(shù)組搭配使用最快,如果把復(fù)制比作水換缸,byte[]相當(dāng)于用瓢舀水,buffered相當(dāng)于用水桶轉(zhuǎn)移水,單用瓢或者單用桶都不如組合使用效率高.之所以視頻中buffered比byte[]慢,我認(rèn)識是因?yàn)檠h(huán)每次都flush了buffered緩沖區(qū),造成一瓢水剛舀進(jìn)桶里就拿著桶去轉(zhuǎn)移這一瓢水了,完全沒有等桶滿了,沒有體現(xiàn)出緩沖區(qū)緩沖的作用,而白白浪費(fèi)了運(yùn)算buffered的時間,在循環(huán)結(jié)束后再flush buffered緩沖區(qū)用時會大大減少.推薦去看看極客學(xué)院這節(jié)視頻,你就明白搭配使用的優(yōu)點(diǎn)了.
??????????????????????????????????????????????????????????????????????????????????????????????????????????????------以上純屬新手見解,懇請大神指正.
2016-04-04
如果用帶緩沖批量字節(jié)讀取那么速度一定比不帶緩沖批量字節(jié)讀取的速度快