Java字节缓冲流原理与用法详解
本文实例讲述了Java字节缓冲流原理与用法。分享给大家供大家参考,具体如下:
一介绍
BufferInputStresm和BufferOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。
二各类中方法比较
从应用程序中把输入放入文件,相当于将一缸水倒入另外一个缸中:
FileOutputStream的write方法:相当于一滴一滴地把水“转移过去。
DataOutputStream的writeXXX方法:相当于一瓢一瓢地把水转移过去。
BufferOutputStream的write方法:相当于一瓢一瓢先把水放入的桶中,再将桶中的水倒入缸中,性能提高了。
三应用——带缓冲区的拷贝
/**
*进行文件的拷贝,利用带缓冲的字节流
*@paramsrcFile
*@paramdestFile
*@throwsIOException
*/
publicstaticvoidcopyFileByBuffer(FilesrcFile,FiledestFile)throwsIOException{
if(!srcFile.exists()){
thrownewIllegalArgumentException("文件:"+srcFile+"不存在");
}
if(!srcFile.isFile()){
thrownewIllegalArgumentException(srcFile+"不是文件");
}
BufferedInputStreambis=newBufferedInputStream(
newFileInputStream(srcFile));
BufferedOutputStreambos=newBufferedOutputStream(
newFileOutputStream(destFile));
intc;
while((c=bis.read())!=-1){
bos.write(c);
bos.flush();//刷新缓冲区
}
bis.close();
bos.close();
}
四应用——单字节,不带缓冲的拷贝
/**
*单字节,不带缓冲进行文件拷贝
*@paramsrcFile
*@paramdestFile
*@throwsIOException
*/
publicstaticvoidcopyFileByByte(FilesrcFile,FiledestFile)throwsIOException{
if(!srcFile.exists()){
thrownewIllegalArgumentException("文件:"+srcFile+"不存在");
}
if(!srcFile.isFile()){
thrownewIllegalArgumentException(srcFile+"不是文件");
}
FileInputStreamin=newFileInputStream(srcFile);
FileOutputStreamout=newFileOutputStream(destFile);
intc;
while((c=in.read())!=-1){
out.write(c);
out.flush();
}
in.close();
out.close();
}
五测试——各种拷贝比较
packagecom.imooc.io;
importjava.io.File;
importjava.io.IOException;
publicclassIOUtilTest4{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
try{
longstart=System.currentTimeMillis();
IOUtil.copyFileByByte(newFile("e:\\javaio\\demo.mp3"),newFile(
"e:\\javaio\\demo2.mp3"));//两万多毫秒
longend=System.currentTimeMillis();
System.out.println(end-start);
start=System.currentTimeMillis();
IOUtil.copyFileByBuffer(newFile("e:\\javaio\\demo.mp3"),newFile(
"e:\\javaio\\demo3.mp3"));//一万多毫秒
end=System.currentTimeMillis();
System.out.println(end-start);
start=System.currentTimeMillis();
IOUtil.copyFile(newFile("e:\\javaio\\demo.mp3"),newFile(
"e:\\javaio\\demo4.mp3"));//7毫秒
end=System.currentTimeMillis();
System.out.println(end-start);
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
六测试结果
13091
9067
10
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。