缓冲流

  作用是提高IO流的读写速度,分为字节缓冲流与字符缓冲流。

  字符缓冲流常用的类有BufferedReader类和BufferedWriter类,分别是缓冲字符输入流和缓冲字符输出流

  字节缓冲流常用的类有BufferedInputStream类、BufferedOutputStream类,分别是缓冲字节输出流和缓冲字节输入流。

  字节缓冲流

    与字节流一样,他也有对应的输入和输出与字节流搭配使用。

    下面对一个文件复制,来展示两个类的作用: 

    FileInputStream fis3 = new FileInputStream("D:\\demo0723\\jdk1.8.zip");
        BufferedInputStream bis1=new BufferedInputStream(fis3);
        FileOutputStream fos3 =new FileOutputStream("D:\\demo0723\\jdk1.8(4).zip");
        BufferedOutputStream bos1=new BufferedOutputStream(fos3);
        int len3=0;
        byte[] b2=new byte[1024];
        while((len3=bis1.read(b2))!=-1){
            bos1.write(b2, 0, len3);
        }
        bis1.close();
        bos1.close();    
    }

    文件复制一般的步骤:1.明确数据源2.添加缓冲流3.明确目的地4.添加缓冲流5.开始复制6.释放资源

  字符缓冲流

    字符缓冲流,只能用于文本文档的读取读出缓冲操作,两个类的使用可以参考字节缓冲流的使用。

    实例(以文件复制为例):

 1 //明确数据源
 2         FileReader fr=new FileReader("D:\\demo0723\\b.txt");
 3         //添加缓冲流
 4         BufferedReader br=new BufferedReader(fr);
 5         //明确目的地
 6         FileWriter fw=new FileWriter("D:\\demo0723\\b\\bb.txt");
 7         //添加缓冲流
 8         BufferedWriter bw=new BufferedWriter(fw);
 9         //开始复制
10         int len=0;
11         char[] ch=new char[1024];
12         while((len=br.read(ch))!=-1){
13             bw.write(ch, 0, len);
14         }
15         //释放资源
16         bw.close();
17         br.close();
18     }

  注意:

    字节流中换行符是:\r\n;

    在字节缓冲流中写入换行是调用newLine()方法,读取文本行是readLine();

  对比字节流复制和加入缓冲流复制文件的速度

    为了较快复制文件,我将用数组单位复制:

  

 1 //普通字节流一个字节数组为单位复制jdk
 2         FileInputStream fis2 = new FileInputStream("D:\\demo0723\\jdk1.8.zip");
 3         FileOutputStream fos2 =new FileOutputStream("D:\\demo0723\\jdk1.8(3).zip");
 4         long start3=System.currentTimeMillis();
 5         int len2=0;
 6         byte [] b1=new byte [1024];
 7         while((len2=fis2.read(b1))!=-1){
 8             fos2.write(b1,0,len2);
 9         }
10         fis2.close();
11         fos2.close();
12         long end3=System.currentTimeMillis();
13         long time2=end3-start3;
14         System.out.println("普通字节流数组的时间:"+time2);
15         
16         //缓冲字节流一个字节数组为单位复制jdk
17         FileInputStream fis3 = new FileInputStream("D:\\demo0723\\jdk1.8.zip");
18         BufferedInputStream bis1=new BufferedInputStream(fis3);
19         FileOutputStream fos3 =new FileOutputStream("D:\\demo0723\\jdk1.8(4).zip");
20         BufferedOutputStream bos1=new BufferedOutputStream(fos3);
21         long start4=System.currentTimeMillis();
22         int len3=0;
23         byte[] b2=new byte[1024];
24         while((len3=bis1.read(b2))!=-1){
25             bos1.write(b2, 0, len3);
26         }
27         bis1.close();
28         bos1.close();
29         long end4=System.currentTimeMillis();
30         long time3=end4-start4;
31         System.out.println("缓冲字节流数组的时间:"+time3);

    执行结果如图所示:

       

 

    加入缓冲流后复制速度明显加快了。

 

 

 

 

 

 

 

 

 

  

posted on 2019-10-29 09:38  仰望星空77  阅读(232)  评论(0编辑  收藏  举报