时间:2021-05-20
本文实例讲述了Java字节缓冲流原理与用法。分享给大家供大家参考,具体如下:
一 介绍
BufferInputStresm和BufferOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。
二 各类中方法比较
从应用程序中把输入放入文件,相当于将一缸水倒入另外一个缸中:
FileOutputStream的write方法:相当于一滴一滴地把水“转移过去。
DataOutputStream的writeXXX方法:相当于一瓢一瓢地把水转移过去。
BufferOutputStream的write方法:相当于一瓢一瓢先把水放入的桶中,再将桶中的水倒入缸中,性能提高了。
三 应用——带缓冲区的拷贝
/** * 进行文件的拷贝,利用带缓冲的字节流 * @param srcFile * @param destFile * @throws IOException */public static void copyFileByBuffer(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在"); } if(!srcFile.isFile()){ throw new IllegalArgumentException(srcFile+"不是文件"); } BufferedInputStream bis = new BufferedInputStream( new FileInputStream(srcFile)); BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(destFile)); int c ; while((c = bis.read())!=-1){ bos.write(c); bos.flush();//刷新缓冲区 } bis.close(); bos.close();}四 应用——单字节,不带缓冲的拷贝
/** * 单字节,不带缓冲进行文件拷贝 * @param srcFile * @param destFile * @throws IOException */public static void copyFileByByte(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在"); } if(!srcFile.isFile()){ throw new IllegalArgumentException(srcFile+"不是文件"); } FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(destFile); int c ; while((c = in.read())!=-1){ out.write(c); out.flush(); } in.close(); out.close();}五 测试——各种拷贝比较
package com.imooc.io;import java.io.File;import java.io.IOException;public class IOUtilTest4 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { long start = System.currentTimeMillis(); IOUtil.copyFileByByte(new File("e:\\javaio\\demo.mp3"), new File( "e:\\javaio\\demo2.mp3")); //两万多毫秒 long end = System.currentTimeMillis(); System.out.println(end - start ); start = System.currentTimeMillis(); IOUtil.copyFileByBuffer(new File("e:\\javaio\\demo.mp3"), new File( "e:\\javaio\\demo3.mp3"));//一万多毫秒 end = System.currentTimeMillis(); System.out.println(end - start ); start = System.currentTimeMillis(); IOUtil.copyFile(new File("e:\\javaio\\demo.mp3"), new File( "e:\\javaio\\demo4.mp3"));//7毫秒 end = System.currentTimeMillis(); System.out.println(end - start ); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}六 测试结果
13091
9067
10
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java中IO流字节流实例详解IO流(输入流、输出流),又分为字节流、字符流。 流是磁盘或其它外围设备中存储的数据的源点或终点。 输入流:程序从输入流读取数
接着上篇文章,我们继续来学习Java中的字节流操作。装饰者缓冲流BufferedInput/OutputStream装饰者流其实是基于一种设计模式「装饰者模式」
javaIO详解:Java流操作有关的类或接口:Java流类图结构:流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两
本文为大家分析了Java中字符流与字节流的区别,供大家参考,具体内容如下1.什么是流Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水
C语言setbuf()函数:把缓冲区与流相关联头文件:#include函数setbuf()用于将指定缓冲区与特定的文件流相关联,实现操作缓冲区时直接操作文件流的