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程序设计有所帮助。