前言

缓存流存在的意义是减少程序读取和写入硬盘的次数,读取和写入都经由缓存流。

读取时一次性从硬盘中读一定数量的数据进入缓存流,需要时从缓存流取出,这样就减少了访问硬盘的次数。

写入时先写入缓存流,只有当缓存流里的数据超出一定量之后再一次性写入到硬盘中,这样也可以减少访问硬盘的次数。


使用缓存流读取数据

BufferedReader需要传入一个已经生成好的读取流(FileReader),这样才能建立缓存流的连接,便于读取

1 package IO流;
 2 
 3 import java.io.File;
 4 import java.io.FileReader;
 5 import java.io.BufferedReader;
 6 import java.io.IOException;
 7 
 8 public class 使用缓存流读取数据 {
 9 
10     public static void main(String[] args) {
11         
12         File f=new File("D://1.txt");
13         try(
14             FileReader fr=new FileReader(f);//在try语句中创建自动关闭流的方式,如果想同时创建多个流就要采用格式。
15             BufferedReader br=new BufferedReader(fr);
16             ){
17             String s=br.readLine();//记录缓存流中的内容
18             while(s!=null)
19             {
20                 System.out.println(s);
21                 s=br.readLine();//缓存流每读出一行内容,缓存流中就会删除这一段内容。
22             }
23         }catch(IOException e){
24             e.printStackTrace();
25         }
26     }
27 }

java 读文件byte java 读文件 缓存_java 读文件byte

 

 

1 package IO流;
 2 
 3 import java.io.File;
 4 import java.io.FileReader;
 5 import java.io.BufferedReader;
 6 import java.io.IOException;
 7 
 8 public class 使用缓存流读取数据 {
 9 
10     public static void main(String[] args) {
11         
12         File f=new File("D://1.txt");
13         try(
14             FileReader fr=new FileReader(f);//在try语句中创建自动关闭流的方式,如果想同时创建多个流就要采用格式。
15             BufferedReader br=new BufferedReader(fr);
16             ){
17             br.readLine();
18             String s=br.readLine();//记录缓存流中的内容
19             while(s!=null)
20             {
21                 System.out.println(s);
22                 s=br.readLine();//缓存流每读出一行内容,缓存流中就会删除这一段内容。
23             }
24         }catch(IOException e){
25             e.printStackTrace();
26         }
27     }
28 }

java 读文件byte java 读文件 缓存_缓存_02

 

 我放上了两段代码和结果,两者不同的地方在于第17行,readLine()函数每次读取都会删除掉缓存流中对应的内容,不管读出来的内容是否被一个String保存过。


使用缓存流写出数据

BufferedWriter和BufferedReader一样,都需要传入一个已经生成好的流,从而建立连接,方便写出数据

1 package IO流;
 2 
 3 import java.io.File;
 4 import java.io.FileWriter;
 5 import java.io.BufferedWriter;
 6 import java.io.IOException;
 7 
 8 public class 使用缓存流写出数据 {
 9 
10     public static void main(String[] args) {
11         File f=new File("D://1.txt");
12         try(
13                 FileWriter fw=new FileWriter(f);
14                 BufferedWriter bw=new BufferedWriter(fw);
15             ){
16                 bw.write("May");
17                 bw.newLine();
18                 bw.write("the force be with you!");
19             }    
20             catch(IOException e) {
21                 e.printStackTrace();
22             }
23     }
24

java 读文件byte java 读文件 缓存_java 读文件byte_03

 

 


Flush

一种跳过缓存,立即将数据写进硬盘的方法

1 package IO流;
 2 
 3 import java.io.File;
 4 import java.io.FileWriter;
 5 import java.io.PrintWriter;
 6 import java.io.IOException;
 7 
 8 
 9 public class Flush {
10 
11     public static void main(String[] args) {
12         File f=new File("D://1.txt");
13         try(
14             FileWriter fw=new FileWriter(f);
15             PrintWriter pw=new PrintWriter(fw);
16             ){
17             pw.print("Hello,");
18             pw.flush();//强制将缓存中的内容写入到硬盘中,无论缓存是否已经满了
19             pw.print("World!");
20             pw.flush();
21         }catch(IOException e) {
22             e.printStackTrace();
23         }
24     }
25 }

java 读文件byte java 读文件 缓存_缓存_04