我嘗試使用下面的代碼複製文件:如何確定緩衝區大小的BufferedOutputStream的write方法
1:
int data=0;
byte[] buffer = new byte[4096];
while((data = bufferedInputStream.read())!=-1){
bufferedOutputStream.write(data);
}
2:
byte[] buffer = new byte[4096];
while(bufferedInputStream.read(buffer)!=-1){
bufferedOutputStream.write(buffer);
}
實際尺寸文件是3892028字節(在窗口上)。該文件將由用戶thro struts2 fileupload上傳。上傳的文件大小與Windows完全相同。當我嘗試從臨時文件夾中複製上載的文件時,複製的文件大小不一,所用的時間也會有所不同(可以忽略不計)。請找到下面的讀物。
Without using buffer(Code 1)
Time taken 77
3892028
3891200
Buffer size 1024(Code 2)
Time taken 17
3892028
3891200
Buffer size 4096(Code 2)
Time taken 18
3892028
3891200
Buffer size 10240(Code 2)
Time taken 14
3892028
3901440
Buffer size 102400(Code 2)
Time taken 9
3892028
3993600
如果我進一步增加緩衝區大小,所花費的時間會增加,同樣可以忽略不計。所以我的問題是,
- 爲什麼文件大小改變?
- 由於此尺寸變化,是否有任何微妙的後果?
- 完成此功能(複製文件)的最佳方法是什麼?
我不知道下面會發生什麼?感謝您的任何建議。 編輯:我有flush()和close()方法調用。 注:我修剪了我的代碼,使其更簡單。
如果你正在讀大量的數據,你不需要使用緩衝流。它們的目的是將小的讀/寫轉化爲大塊的數據。 – 2012-04-03 13:43:21