示例展示:
package buffer; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * 使用缓冲字节流复制文件 (包装流) * BufferedInputStream BufferedOutputStream * @author superdrew * * 使用缓冲字节流 可以提高读写的效率 * 1.认识什么是缓冲流 * InputStream OutputStream 字节流 * BufferedInputStream BufferedOutputStream 处理流 包装流 * * 2.好处: * 提供了缓冲区,提高了效率,简化操作 * 3.原理:输入流和输出流两段提供了 默认大小是 8192 的缓冲区 占用内存空间 * 其实就是一个字节数组 * 具体原理:看图 * 减少硬盘的读取次数,效率提高了 * * 使用缓冲区 如果流不关闭,文件小于8192,复制完没有任何内容 * 4.输出缓冲区的刷新 * 1.手动刷新 bos.flush(); * 2.自动刷新 满了自动刷新 * 3.close时,会自动刷新 * * 5.关闭高层流的时候,底层的流会自动关闭 */ public class TestBuffered { public static void main(String[] args) throws IOException { //创建 缓冲字节流 输入流 /*InputStream in = new FileInputStream("d:/sxt.txt"); BufferedInputStream bis = new BufferedInputStream(in);*/ //创建缓冲字节流 输出流 /*OutputStream os = new FileOutputStream("d:/sxt2.txt"); BufferedOutputStream bos = new BufferedOutputStream(os);*/ //合并上面代码:简化 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("d:/mp4.rmvb"));//资源路径(相对/绝对) BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:/mp42.rmvb"));//资源路径(相对/绝对) //中转站 一个字节(水杯) /*int n =0; n = bis.read(); while(n!=-1){ bos.write(n); n = bis.read(); }*/ //中转站使用 一个 字节数组 (水桶) byte [] buf = new byte [1024]; int n = bis.read(buf); while(n!=-1){ bos.write(buf,0,n);//写 n = bis.read(buf);//再读 } //手动刷新输出流的缓冲区 //bos.flush(); //关闭 bos.close(); bis.close(); /*os.close(); //可有可无! in.close();*/ } }
结果展示:就得自己玩了。。