前言
缓存流存在的意义是减少程序读取和写入硬盘的次数,读取和写入都经由缓存流。
读取时一次性从硬盘中读一定数量的数据进入缓存流,需要时从缓存流取出,这样就减少了访问硬盘的次数。
写入时先写入缓存流,只有当缓存流里的数据超出一定量之后再一次性写入到硬盘中,这样也可以减少访问硬盘的次数。
使用缓存流读取数据
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 }
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 }
我放上了两段代码和结果,两者不同的地方在于第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
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 }