【发布时间】:2012-04-03 13:19:01
【问题描述】:
我正在尝试使用以下代码复制文件:
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 字节(在 windows 上)。该文件将由用户通过 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() 方法调用。 注意:我已经修剪了我的代码以使其更简单。
【问题讨论】:
-
如果您正在读取大块数据,则不需要使用缓冲流。他们的目的是将小的读/写变成大块的数据。