问答详情
源自:4-5 字节缓冲流

对1.09G文件操作时间,谈及个人理解

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在循环内部时间也会过长,没有做对比

提问者:qq_海风_16 2017-10-19 00:14

个回答

  • qq_prisoner_4
    2019-07-08 20:44:58

    这是为啥。。