缓存可以说是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得在流上执行skip()mark()和reset()方法都成为可能。
大纲:
BufferedReader类与BufferWriter类
BufferedReader类与BufferWriter类分别继承了Reader类与Writer类。这两个类同样具有内部缓存机制,并可以行为单位行为单位进行输入、输出。
根据BufferedReader类的特点,可总结出字符数据读取文件的过程:字符数据==》BuffereaWriter==》OutoutStreamWriter==》OutoutStream==》文件。
BufferedReader类常用的方法如下:
read()方法:读取单个字符。
readLine()方法:读取一个文本行,并将其返回为字符串,若无数据可读,则返回null。
write(String s,int off,int len)方法:写入字符串的某一部分。
flush()方法:刷新该流程的缓存。
newLine()方法:写入一个行分割符。
在使用BufferedWriter类的Write()方法时,数据并没有直接被写入到输出流中,而是首先进入缓存区中,如果想立刻将缓存区的数据写入输出流中,一定要调用flush()方法。
import java.io.*; public class TestFile4 { public static void main(String[] args) { try { File f=new File("d:\test.txt"); //带缓存 //Writer接口的实现类 FileWriter fw=new FileWriter(f,true); //缓存写入类,构造时需要传入Writer实例 BufferedWriter bw=new BufferedWriter(fw); bw.write(" 这是缓存方式写入的字符串"); //自动管理缓存 //自动写入:1.缓存满了 2.缓存关闭之前 bw.flush();//主动清空缓存,写入数据 bw.write(" 这是清空后缓存方式写入的字符串"); bw.close(); fw.close(); System.out.println("写入完成"); //缓存读 FileReader fr=new FileReader(f); BufferedReader br=new BufferedReader(fr); //第一次读 // String str=br.readLine(); // // System.out.println(str); // // while(str!=null) // { // System.out.println(str); // // str=br.readLine(); // } while(true) { String str=br.readLine(); if(str==null) { break; } System.out.println(str); } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }