九、缓冲流

一、初步认识

      Java缓冲流本身并不具有IO流的读取与写入功能,只是在别的流(节点流或其他处理流)上加上缓冲功能提高效率,就像是把别的流包装起来一样,因此缓冲流是一种处理流(包装流)。

      当对文件或者其他数据源进行频繁的读写操作时,效率比较低,这时如果使用缓冲流就能够更高效的读写信息。因为缓冲流是先将数据缓存起来,然后当缓存区存满后或者手动刷新时再一次性的读取到程序或写入目的地。

      因此,缓冲流还是很重要的,我们在IO操作时记得加上缓冲流来提升性能。

二、缓冲流涉及到的类

  • BufferedInputStream
  • BufferedOutputStream
  • BufferedReader
  • BufferedWriter

三、注意

  • 当写入数据时,首先写入缓冲区,当缓冲区满时,其中的数据写入所连接的输出流。使用方法 flush()可以强制将缓冲区的内容全部写入输出流
  • 关闭流的顺序和打开流的顺序相反.只要关闭高层流即可,关闭高层流其实关闭的底层节点流
  • flush()的使用:手动将 buffer 中内容写入文件
  • 缓存区的大小默认是8192字节,也可以使用其它的构造方法自己指定大小。
  • readLine()方法是BufferedReader特有的方法,可以对文本文件进行更加方便的读取操作。
  • 写入一行后要记得使用newLine()方法换行。
 1 import java.io.BufferedWriter;
 2 import java.io.File;
 3 import java.io.FileNotFoundException;
 4 import java.io.FileWriter;
 5 import java.io.IOException;
 6 
 7 /**
 8  * 文件字符输出流 加入缓冲流
 9  *1、创建源
10  *2、选择流
11  *3、操作(写出内容)
12  *4、释放资源
13  *  14  *
15  */
16 public class BufferedTest04 {
17 
18     public static void main(String[] args) {
19         //1、创建源
20         File dest = new File("dest.txt");
21         //2、选择流
22         BufferedWriter writer =null;
23         try {
24             writer = new BufferedWriter(new FileWriter(dest));
25             //3、操作(写出)            
26             writer.append("IO is so easy");
27             writer.newLine();     //换行
28             writer.append("你好");
29             writer.flush();   //手动将buffer中内容写入文件,因为缓存未满,不会写入所连接的输出流
30         }catch(FileNotFoundException e) {        
31             e.printStackTrace();
32         }catch (IOException e) {
33             e.printStackTrace();
34         }finally{
35             //4、释放资源
36             try {
37                 if (null != writer) {
38                     writer.close();
39                 } 
40             } catch (Exception e) {
41             }
42         }
43     }
44 
45 }
 1 import java.io.BufferedReader;
 2 import java.io.File;
 3 import java.io.FileNotFoundException;
 4 import java.io.FileReader;
 5 import java.io.IOException;
 6 
 7 /**
 8  * 四个步骤: 分段读取 文件字符输入流  加入缓冲流
 9  * 1、创建源
10  * 2、选择流
11  * 3、操作
12  * 4、释放资源
13  * 
14  * 15  *
16  */
17 public class BufferedTest03 {
18 
19     public static void main(String[] args) {
20         //1、创建源
21         File src = new File("abc.txt");
22         //2、选择流
23         BufferedReader  reader =null;
24         try {
25             reader =new BufferedReader(new FileReader(src));
26             //3、操作 (分段读取)
27             String line =null;             //不是-1了,当读不到时是null
28             while((line=reader.readLine())!=null) {       //readLine()读一行文字
29                 //字符数组-->字符串
30                 System.out.println(line);
31             }        
32         
33         } catch (FileNotFoundException e) {
34             e.printStackTrace();
35         } catch (IOException e) {
36             e.printStackTrace();
37         }finally {
38             //4、释放资源
39             try {
40                 if(null!=reader) {
41                     reader.close();
42                 }
43             } catch (IOException e) {
44                 e.printStackTrace();
45             }
46         }
47     }
48 
49 }
原文地址:https://www.cnblogs.com/qiaoxin11/p/12601241.html