我尝试使用下面的代码复制文件:如何确定缓冲区大小的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