FileInputStream和FileOutputStream字节流的两种读写方式效率对比

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/linhaiyun_ytdx/article/details/52503789

 第一种读写方式:单个字节写入输出流

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.stream.FileImageInputStream;

public class FileInputStreamOut 
{

	public static void main(String[] args) 
	{
	  try {
		FileCopyUtil.copyFile(new File("H:\\Haige\\陈翔 - 烟火.mp3"), new File("H:\\gei\\陈翔 - 烟火.mp3"));
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	}

}

class FileCopyUtil
{
	public static void copyFile(File src,File dst)throws IOException//从原文件拷贝到目标文件
	{
		FileInputStream fis=new FileInputStream(src);//到指定的文件中读取数据
		FileOutputStream fos=new FileOutputStream(dst);//指定文件输出数据
		long time1=System.currentTimeMillis();
		int data=-1;
		while((data=fis.read())!=-1)
		{
			fos.write(data);//往要输出文件写数据
		}
		fos.close();
		fis.close();
		long time2=System.currentTimeMillis();
		System.out.println("复制完成,共花费:"+(time2-time1)+"毫秒");
	}
}

运行结果(拷贝音乐文件所需时间):

复制完成,共花费:44599毫秒


第二种读写方式:先将数据写入缓冲区,等缓冲区中的数据满了,再将缓冲区中的数据写入对应的输出流中

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.stream.FileImageInputStream;

public class FileInputStreamOut 
{

	public static void main(String[] args) 
	{
	  try {
		FileCopyUtil.copyFile(new File("H:\\Haige\\陈翔 - 烟火.mp3"), new File("H:\\gei\\陈翔 - 烟火.mp3"));
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	}

}

class FileCopyUtil
{
	public static void copyFile(File src,File dst)throws IOException//从原文件拷贝到目标文件
	{
		FileInputStream fis=new FileInputStream(src);//到指定的文件中读取数据
		FileOutputStream fos=new FileOutputStream(dst);//指定文件输出数据
		byte []buf=new byte[1024*1024];//创建1M大小的缓冲区,用来存放输入流中的字节
		int len=0;//用来保存实际读到的字节数
		long time1=System.currentTimeMillis();
		while((len=fis.read(buf))!=-1)//没有读到文件的末尾
		{
			fos.write(buf, 0, len);//实际读到的字节数
		}
		fos.close();
		fis.close();
		long time2=System.currentTimeMillis();
		System.out.println("复制完成,共花费:"+(time2-time1)+"毫秒");
	}
}

运行结果(拷贝音乐文件所需时间):

复制完成,共花费:101毫秒


 总结:由上面两种文件读写方式的对比可以看出,第二种方式的读写效率更高一些,可以作为大型数据文件的复制读写的操作。


展开阅读全文

没有更多推荐了,返回首页