java IO流效率对比

本教程操作环境:windows7系统、java10版,DELL G3电脑。

1.缓冲流说明

缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类:

  • 字节缓冲流:BufferedInputStream,BufferedOutputStream

  • 字符缓冲流:BufferedReader,BufferedWriter

缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。

2.字符流和缓冲字符流的对比

publicclassIOTest{
publicstaticvoidmain(String[]args)throwsIOException{
//数据准备
dataReady();

Filedata=newFile("C:/Mu/data.txt");
Filea=newFile("C:/Mu/a.txt");
Fileb=newFile("C:/Mu/b.txt");
Filec=newFile("C:/Mu/c.txt");

longstart=System.currentTimeMillis();
copy(data,a);
longend=System.currentTimeMillis();

longstart2=System.currentTimeMillis();
copyChars(data,b);
longend2=System.currentTimeMillis();

longstart3=System.currentTimeMillis();
bufferedCopy(data,c);
longend3=System.currentTimeMillis();

System.out.println("普通字节流1耗时:"+(end-start)+"ms,文件大小:"+a.length()/1024+"kb");
System.out.println("普通字节流2耗时:"+(end2-start2)+"ms,文件大小:"+b.length()/1024+"kb");
System.out.println("缓冲字节流耗时:"+(end3-start3)+"ms,文件大小:"+c.length()/1024+"kb");
}

//普通字符流不使用数组
publicstaticvoidcopy(Filein,Fileout)throwsIOException{
Readerreader=newFileReader(in);
Writerwriter=newFileWriter(out);

intch=0;
while((ch=reader.read())!=-1){
writer.write((char)ch);
}
reader.close();
writer.close();
}

//普通字符流使用字符流
publicstaticvoidcopyChars(Filein,Fileout)throwsIOException{
Readerreader=newFileReader(in);
Writerwriter=newFileWriter(out);

char[]chs=newchar[1024];
while((reader.read(chs))!=-1){
writer.write(chs);
}
reader.close();
writer.close();
}

//缓冲字符流
publicstaticvoidbufferedCopy(Filein,Fileout)throwsIOException{
BufferedReaderbr=newBufferedReader(newFileReader(in));
BufferedWriterbw=newBufferedWriter(newFileWriter(out));

Stringline=null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}

//释放资源
bw.close();
br.close();
}

//数据准备
publicstaticvoiddataReady()throwsIOException{
StringBuildersb=newStringBuilder();
for(inti=0;i<600000;i++){
sb.append("abcdefghijklmnopqrstuvwxyz");
}
OutputStreamos=newFileOutputStream(newFile("C:/Mu/data.txt"));
os.write(sb.toString().getBytes());

os.close();
System.out.println("完毕");
}
}

运行结果:

普通字符流1耗时:1337ms,文件大小:15234kb
普通字符流2耗时:82ms,文件大小:15235kb
缓冲字符流耗时:205ms,文件大小:15234kb

原文来自:https://www.py.cn

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容