为了提高字符流读写的效率,引入了缓冲机制,进行字符批量的读写,提高了单个字符读写的效率。BufferedReader用于加快读取字符的速度,BufferedWriter用于加快写入的速度。
字符缓冲流根据流的方向,共有 2 个:
-
写入数据到流中,字符缓冲输出流BufferedReader
-
读取流中的数据,字符缓冲输入流 BufferedWriter
1.BufferedWriter类
BufferedWriter类从Writer类继承而来。
- 构造方法
缓冲区的默认大小为8192,一般情况下,使用默认的缓冲区大小就足够了,当然我们还可以指定缓冲区的大小。
- 常用的方法
字符输出缓冲流(BufferedWriter)不但覆盖了父类的方法,还新增了newLine()方法。
newLine()方法会根据当前的操作系统,写入一个换行符(不同操作系统换行符不一样,例如:windows操作系统的换行符为“\r\n”,Linux操作系统的换行符为“\n”)。
关于flush()方法使用场景:
假设一个文件有1122个字符,缓冲区大小为100个字符,那么要读取12次,最后一次只有22个字符,但此时缓冲区并没有存满,不能将存储的内容从缓冲区中取出。这时我们需要调用缓冲流自带的一个方法flush(强制写入)将最后一次读取的内容强制写入到文件中去。
- 向文件中写数据
【示例】使用字符缓冲流向文件中写数据
public class BufferedCharDemo {
public static void main(String[] args) throws IOException {
// 创建基本字符输出流
Writer w = new FileWriter("demo.txt");
// 把基本的流进行包装
BufferedWriter bw = new BufferedWriter(w);
// 写数据
for(int i = 0; i < 5; i++) {
bw.write("你好啊");
// 添加换行符
bw.newLine();
bw.flush();
}
// 关闭流
bw.close();
}
}
注意:关闭缓冲流时已经实现对字符流的关闭,所以此处我们只需要关闭缓冲流即可。
2.BufferedReader类
BufferedReader类从Reader类继承而来。
-
构造方法
缓冲区的默认大小为8192,一般情况下,使用默认的缓冲区大小就足够了,当然我们还可以指定缓冲区的大小。 -
常用的方法
字符输入缓冲流(BufferedReader)不但覆盖了父类的方法,还新增了readLine()方法。
String readLine()方法从输入流中读取一行文本,如果已到达流末尾,则返回null。
- 从文件中读取数据