zoukankan      html  css  js  c++  java
  • 缓冲流

    缓冲流

      作用是提高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     }

      注意:

        字节流中换行符是: ;

        在字节缓冲流中写入换行是调用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);

        执行结果如图所示:

           

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

      

  • 相关阅读:
    Liferay安装maven
    html之pre标签
    a标签使用注意事项
    AngularJS学习记录
    页面不能访问,抛出 spring java.lang.IllegalArgumentException: Name for argument type [java.lang.String] 异常
    ant编译的时候,报错文件不存在,以及版本不一致
    Eclipse 更改Java 版本的方法
    总结一下本次准备环境时遇到的问题,以供下次参考
    数据上下文中的AddOrUpdate方法
    推荐一款github管理神器SourceTree
  • 原文地址:https://www.cnblogs.com/zhai113/p/11732802.html
Copyright © 2011-2022 走看看