java缓冲流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。当对文件或其他目标频繁读写或操作效率低,效能差。这时使用缓冲流能够更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。所以说,缓冲流还是很重要的,在IO操作时记得加上缓冲流提升性能。


       缓冲流分为字节和字符缓冲流

字节缓冲流为:

BufferedInputStream—字节输入缓冲流

BufferedOutputStream—字节输出缓冲流

字符缓冲流为:

BufferedReader—字符输入缓冲流

BufferedWriter—字符输出缓冲流

下面主要介绍这四种缓冲流的使用。


一.字节缓冲流

1.BufferedOutputStream—字节输出缓冲流

      BufferedOutputStream类实现缓冲的输出了,通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必每一个字节写入都调用底层系统。

该类的构造函数:

【java的 IO流之缓冲流】_结构图

示例代码:

  1. public static void main(String[] args) {         

  2.       try {  

  3.     //创建字节输出流实例  

  4.     OutputStream out=new FileOutputStream("L:\\test.txt");  

  5.     //根据字节输出流构建字节缓冲流  

  6.     BufferedOutputStream buf=new BufferedOutputStream(out);  

  7.       

  8.     String data="好好学习,天天向上";  

  9.     buf.write(data.getBytes());//写入缓冲区  

  10.     buf.flush();//刷新缓冲区,即把内容写入  

  11.     //关闭流  

  12.     buf.close();//关闭缓冲流时,也会刷新一次缓冲区  

  13.     out.close();  

  14.       

  15. } catch (IOException e) {  

  16.     e.printStackTrace();  

  17. }  

  18.     

  19.    }   

复制代码

2.BufferedInputStream—字节输入缓冲流

       BufferedInputStream为别的输入流添加缓冲功能,在创建BufferedInputStream时会创建一个内部缓冲数组,用于缓冲数据,提高性能。

【java的 IO流之缓冲流】_结构图_02

示例代码:

  1. public static void main(String[] args) {         

  2.        try {  

  3.         //创建字节输入流实例  

  4.         InputStream in=new FileInputStream("L:\\test.txt");  

  5.         //根据字节输入流构建字节缓冲流  

  6.         BufferedInputStream buf=new BufferedInputStream(in);  

  7.           

  8.         byte[]bytes=new byte[1024];  

  9.         //数据读取  

  10.         int len=-1;  

  11.         StringBuffer  sb=new StringBuffer();  

  12.         while((len=buf.read(bytes))!=-1)  

  13.         {  

  14.             sb.append(new String(bytes,0,len));  

  15.         }  

  16.         System.out.println("内容为:"+sb);  

  17.         //关闭流  

  18.         buf.close();  

  19.         in.close();  

  20.           

  21.           

  22.     } catch (IOException e) {  

  23.         e.printStackTrace();  

  24.     }  

  25.      

  26.     }   

复制代码

运行结果:
【java的 IO流之缓冲流】_结构图_03 

二.字符缓冲流

1.BufferedWriter—字符输出缓冲流

    将文本写入字符输出流,缓冲各个字符,从而提供高效的写入。可以指定缓冲区的大小,一般情况下,默认的缓冲区大小就足够了。

【java的 IO流之缓冲流】_结构图_04

示例代码:

  1. public static void main(String[] args) {  

  2.       

  3.     try {  

  4.         Writer w=new FileWriter("L:\\test.txt");  

  5.         //根据字符输出流创建字符缓冲流  

  6.         BufferedWriter buf=new BufferedWriter(w);  

  7.         //写入数据  

  8.         buf.write("只要功夫深铁杵磨成针");  

  9.         //刷新流  

  10.         buf.flush();  

  11.         //关闭流  

  12.         buf.close();  

  13.         w.close();  

  14.     } catch (IOException e) {  

  15.         e.printStackTrace();  

  16.     }  

  17.       

  18.     

  19.    }   

复制代码

运行结果:
【java的 IO流之缓冲流】_结构图_05 

2.BufferedReader—字符输入缓冲流

         从字符输入流中读取信息,缓冲各个字符,从而实现高效读取。可以指定缓冲区的大小,一般情况下,默认的缓冲区大小就足够了。默认大小为8192.


示例代码:

  1. public static void main(String[] args) {  

  2.           

  3.         try {  

  4.             Reader r=new FileReader("L:\\test.txt");  

  5.             //根据字符输入流创建字符缓冲流  

  6.             BufferedReader buf=new BufferedReader(r);  

  7.               

  8.             char [] data=new char[512];  

  9.             //数据读取  

  10.             int len=-1;  

  11.             StringBuilder sb=new StringBuilder();  

  12.             while((len=buf.read(data))!=-1)  

  13.             {  

  14.                 sb.append(new String(data,0,len));  

  15.             }  

  16.             System.out.println("内容是: "+sb);  

  17.             //关闭流  

  18.             buf.close();  

  19.             r.close();  

  20.         } catch (IOException e) {  

  21.             e.printStackTrace();  

  22.         }  

  23.           

  24.      

  25.     }   

复制代码

运行结果:
【java的 IO流之缓冲流】_结构图_06