当前位置 : 主页 > 编程语言 > c++ >

关于IO流中文件复制的效率问题

来源:互联网 收集:自由互联 发布时间:2021-07-03
file copy import java.io.*;public class fileCopy {public static void main(String[] args) throws Exception{File file =new File("F:/workspace/Photoshop CC_CHS(www.greenxf.com).rar");File new_file=new File("E:/ps.rar");long start=System.curren
file copy
import java.io.*;
public class fileCopy 
{
	public static void main(String[] args) throws Exception
	{
		File file =new File("F:/workspace/Photoshop CC_CHS(www.greenxf.com).rar");
		File new_file=new File("E:/ps.rar");
		long start=System.currentTimeMillis();
		copy(file,new_file);
		long end=System.currentTimeMillis();
		System.out.println(end-start);//8000
		System.out.println("--------------");

		long start1=System.currentTimeMillis();
		copy1(file,new_file);
		long end1=System.currentTimeMillis();
		System.out.println(end1-start1);//3000

	}

	//1、字节流读取字节数组:
	public static void copy(File file,File new_file){
		try{
			FileInputStream fis =new  FileInputStream(file);
			FileOutputStream fos =new FileOutputStream(new_file);
			byte[] bf= new byte[1024];
			int by=0;
			while((by=fis.read(bf))!=-1){
				//read(by)从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中
				//read(by)返回读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。 
				fos.write(bf,0,by);//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
			}
			fos.close();
			fis.close();
		}catch(Exception e){

		}
	}

//2、缓冲区对象读取字节数组:读取速度最快
	public static void copy1(File file,File new_file){
		try{
			FileInputStream fis =new  FileInputStream(file);
			BufferedInputStream bi=new BufferedInputStream(fis);
			FileOutputStream fos =new FileOutputStream(new_file);
			BufferedOutputStream bo=new BufferedOutputStream(fos);
			byte[] bf= new byte[1024];
			int by=0;
			while((by=bi.read(bf))!=-1){
				//read(by)从此输入流中将最多 by.length 个字节的数据读入一个 byte 数组中
				//read(by)返回读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。 
				bo.write(bf,0,by);//将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
			}
			fos.close();
			fis.close();
		}catch(Exception e){

		}
	
	}
	//3、单个字节读取
	//FileInputStream fis=new FileInputStream(“……”);
	//Fis.read();
	//这种方式每次只获取一个字节的数据,而要复制的数据变大时,就要增加大量的循环次数,才可以把所有数据复制完,
	//——速度是相当的慢,平时开发今本不用这种复制方式。
	
	//4、利用缓冲区对象读取单个字节
}
网友评论