public static void copyFlie(File srcFile ,File destFile) throws IOException {
if(!srcFile.exists()) {
throw new IllegalArgumentException("目标文件:"+srcFile +" 不存在");
}
if(!srcFile.isFile()) {
throw new IllegalArgumentException(srcFile+" 不是文件");
}
FileInputStream in = new FileInputStream(srcFile);
FileOutputStream out = new FileOutputStream(destFile);
byte[] buf = new byte[8*1024];
int b;
while((b = in.read(buf, 0, buf.length))!=-1) {
out.write(buf, 0, b);
}
in.close();
out.close();
}
/**
* 进行文件的拷贝,利用带缓存的字节流
*
* @param srcFile
* @param destFile
*/
public static void copyByBuffer(File srcFile ,File destFile) throws IOException{
if(!srcFile.exists()) {
throw new IllegalArgumentException("目标文件:"+srcFile +" 不存在");
}
if(!srcFile.isFile()) {
throw new IllegalArgumentException(srcFile+" 不是文件");
}
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] buf = new byte[8*102];
int c;
while((c=bis.read(buf , 0 ,buf.length))!=-1) {
bos.write(buf,0,c);
bos.flush();//刷新缓冲区
}
bis.close();
bos.close();
}
对1.09G文件的操作,进行五组数据对比,copyFlie平均用时14093,copyByBuffer当flush在循环外平均用时13971
由于每次读取时间不确定,有的copyfile快于copybybuffere,有的相反,所以感觉速度不相上下。当copybybuffere采用单字节的时候,时间不可想象,太长了,如果flush在循环内部时间也会过长,没有做对比
这是为啥。。