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

為了賬號安全,請及時綁定郵箱和手機立即綁定

事實證明BufferedInputStream比FileInputStream快,而不是老師說的那個結(jié)論批量比緩沖塊?。∪绻烤彌_與批量相比呢?代碼如下

/**
?*?批量讀寫
?*
?*?@param?srcFile
?*?@param?destFile
?*/
public?static?void?copyFile(File?srcFile,?File?destFile)?{
????FileInputStream?inputStream?=?null;
????FileOutputStream?outputStream?=?null;
????if?(!srcFile.exists())?{
????????throw?new?IllegalArgumentException("源目標(biāo)文件不存在!?。?);
????}
????if?(!srcFile.isFile())?{
????????throw?new?IllegalArgumentException("源目標(biāo)不是文件類型?。?!");
????}
????try?{
????????inputStream?=?new?FileInputStream(srcFile);
????????outputStream?=?new?FileOutputStream(destFile);
????????byte[]?bytes?=?new?byte[8?*?1024];
????????int?length?=?0;
????????while?((length?=?inputStream.read(bytes,?0,?bytes.length))?!=?-1)?{
????????????outputStream.write(bytes,?0,?length);
????????????outputStream.flush();
????????}
????}?catch?(IOException?e)?{
????????e.printStackTrace();
????}?finally?{
????????try?{
????????????outputStream.close();
????????????inputStream.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}

}

/**
?*?緩沖批量讀寫
?*
?*?@param?srcFile
?*?@param?destFile
?*/
public?static?void?copyFileByBuffer(File?srcFile,?File?destFile)?{
????FileInputStream?inputStream?=?null;
????BufferedInputStream?bufferedInputStream?=?null;
????FileOutputStream?outputStream?=?null;
????BufferedOutputStream?bufferedOutputStream?=?null;
????if?(!srcFile.exists())?{
????????throw?new?IllegalArgumentException("源目標(biāo)文件不存在!??!");
????}
????if?(!srcFile.isFile())?{
????????throw?new?IllegalArgumentException("源目標(biāo)不是文件類型?。?!");
????}
????try?{
????????inputStream?=?new?FileInputStream(srcFile);
????????bufferedInputStream?=?new?BufferedInputStream(inputStream);
????????outputStream?=?new?FileOutputStream(destFile);
????????bufferedOutputStream?=?new?BufferedOutputStream(outputStream);
????????byte[]?bytes?=?new?byte[8?*?1024];
????????int?length?=?0;
????????while?((length?=?bufferedInputStream.read(bytes,?0,?bytes.length))?!=?-1)?{
????????????bufferedOutputStream.write(bytes,?0,?length);
????????????outputStream.flush();
????????}
????}?catch?(IOException?e)?{
????????e.printStackTrace();
????}?finally?{
????????try?{
????????????bufferedOutputStream.close();
????????????bufferedInputStream.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}

}

測試代碼:

public?class?IOUtilTest?{

????public?static?void?main(String[]?args)?throws?IOException?{
????????File?srcFile1?=?new?File("F:\\學(xué)習(xí)資料\\1-1和2.mp4");
????????File?destFile1?=?new?File("F:\\1.mp4");
????????long?beg1?=?System.currentTimeMillis();
????????IOUtil.copyFile(srcFile1,destFile1);
????????long?end1?=?System.currentTimeMillis();
????????System.out.println("批量讀取時間毫秒:"+(end1?-?beg1));//768

????????File?destFile2?=?new?File("F:\\2.mp4");
????????long?beg2?=?System.currentTimeMillis();
????????IOUtil.copyFileByBuffer(srcFile1,destFile2);
????????long?end2?=?System.currentTimeMillis();
????????System.out.println("批量緩沖讀取時間毫秒:"+(end2?-?beg2));//130

????}
}

源目標(biāo)文件大?。?0.4M

正在回答

5 回答

這里的對比條件并不成立,并不能說誰比誰快
而是理解緩沖是為了減少I/O,可以理解為減少寫次數(shù),比如讀出一個字節(jié)就去寫入,和全部讀出放入緩沖區(qū)存儲最后一次寫入,當(dāng)時是后者更好


上面的同學(xué)舉的例子:
在批量讀取、和緩沖批量讀中均是全部讀出一次寫入,其實并沒有用到緩沖的優(yōu)勢

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

qq_什么都不懂就好_0

細(xì)節(jié)上有點問題
2019-04-02 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_prisoner_4 回復(fù) qq_什么都不懂就好_0

對 應(yīng)該對比多次寫入和用緩沖一次寫入
2019-07-08 回復(fù) 有任何疑惑可以回復(fù)我~

理論上是不通的。

按道理應(yīng)該是批量比緩沖更快??梢钥匆幌略创a,知道緩沖底層調(diào)的是批量。如果數(shù)據(jù)不對,試一下多試幾次。有可能是JVM垃圾收集影響了。還有要拷貝不同的文件。讀過的文件操作系統(tǒng)有緩存了。拷一個1-2GB的文件試試。

?public?static?void?main(String[]?args)?throws?IOException?{????????File?srcFile1?=?new?File("logs/input.iso");????????File?destFile1?=?new?File("logs/output.iso");????????long?beg1?=?System.currentTimeMillis();????????copyFileByBatch(srcFile1,destFile1);????????long?end1?=?System.currentTimeMillis();????????System.out.println("批量讀取時間毫秒:"+(end1?-?beg1));//1261????????File?srcFile2?=?new?File("logs/input2.iso");????????File?destFile2?=?new?File("logs/output2.iso");????????long?beg2?=?System.currentTimeMillis();????????copyFileByBuffer(srcFile2,destFile2);????????long?end2?=?System.currentTimeMillis();????????System.out.println("批量緩沖讀取時間毫秒:"+(end2?-?beg2));//1899????}


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

qq_慕虎6536986

緩沖只有用在外部接口是碎片化讀取才有效率。比如網(wǎng)絡(luò)通信中之類的。解包協(xié)議時先讀一個字段是幾個字節(jié),再讀幾個字節(jié)+幾個字節(jié)+幾個字節(jié)。這種就不如先讀一大批緩沖在內(nèi)存里,再讀就有效率了。
2018-12-17 回復(fù) 有任何疑惑可以回復(fù)我~
#2

qq_慕虎6536986

inputStream = new FileInputStream(srcFile); bufferedInputStream = new BufferedInputStream(inputStream, 8192); outputStream = new FileOutputStream(destFile); bufferedOutputStream = new BufferedOutputStream(outputStream, 8192);
2018-12-18 回復(fù) 有任何疑惑可以回復(fù)我~

我看的時候也在想這個問題。謝謝給出答案!

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

受教了,我剛才還鬧不清楚批量比緩沖快還用緩存干嘛,現(xiàn)在想明白啦。鬧混了對比的對象應(yīng)該是單字節(jié)跟緩沖對比,批量跟批量緩沖對比。

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

因為用了緩存~

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

舉報

0/150
提交
取消

事實證明BufferedInputStream比FileInputStream快,而不是老師說的那個結(jié)論批量比緩沖塊!!如果批量緩沖與批量相比呢?代碼如下

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

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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