2(1)-字节缓冲流
package com.io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import org.junit.Test; /** * * @author Administrator *1、流的分类 *(1)按照数据流向的不同,分为输入流和输出流 *(2)按照处理数据单位的不同,分为字节流和字符流 *(3)按照角色的不同,分为节点流(直接作用于文件,所有带File的InputStream OutputStream)、处理流(作用于节点流上面,提高效率) *2、IO体系 *抽象基类 节点流(即文件流) 缓总流(处理流的一种) *InputStream FileInputStream BufferedInputStream *OutputStream FileOutputStream BufferedOutputStream(flush) *Reader FileReader BufferedReader(readLine方法,一次读一行) *Writer FileWriter BufferedWriter(flush) *3、所有的处理流都作用于上面四种节点流,才能进行对文件操作 */ public class 缓冲字节流 { @Test public void compareBuffered(){ long begin = System.currentTimeMillis(); copyFileBuffered(); long end = System.currentTimeMillis(); System.out.println("加了缓冲流的复制时间:" + (end-begin)); begin = System.currentTimeMillis(); copyFileNoteBuffered(); end = System.currentTimeMillis(); System.out.println("没有缓冲流的复制时间:" + (end-begin)); } /** * 加了缓冲流的文件复制 */ @Test public void copyFileBuffered(){ //3、创建处理流(缓冲流) BufferedInputStream bis = null; BufferedOutputStream bos = null; try { //1、创建文件对象 File inFile = new File("v1.mp4"); File outFile = new File("v2.mp4"); //2、创建对应的节点流 FileInputStream fis = null; FileOutputStream fos = null; //4、实例化节点流和处理流 fis = new FileInputStream(inFile); fos = new FileOutputStream(outFile); bis = new BufferedInputStream(fis); bos = new BufferedOutputStream(fos); //5、定义字节数组 byte[] b = new byte[1024]; int len; //6、开始读写文件 while((len = bis.read(b)) != -1){ bos.write(b, 0, len); bos.flush();//刷新一下,重要 } } catch (IOException e) { e.printStackTrace(); }finally{ //在关闭最外层的处理流的时候会自动关闭里面的节点流,所以节点流不需要显示的关闭 try { bis.close(); } catch (IOException e) { e.printStackTrace(); } try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 没有缓冲流的文件复制 */ @Test public void copyFileNoteBuffered(){ //2、创建对应的节点流 FileInputStream fis = null; FileOutputStream fos = null; try { //1、创建文件对象 File inFile = new File("v1.mp4"); File outFile = new File("v3.mp4"); fis = null; fos = null; //4、实例化节点流和处理流 fis = new FileInputStream(inFile); fos = new FileOutputStream(outFile); byte[] b = new byte[1024]; int len; //6、开始读写文件 while((len = fis.read(b)) != -1){ fos.write(b, 0, len); } } catch (IOException e) { e.printStackTrace(); }finally{ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }