Java基础:IO流之字符流缓冲区

字符流缓冲区

字符流的缓冲区:BufferedWriter 和 BufferedReader

  • 缓冲区的出现时为了提高流的操作效率而出现的.
  • 需要被提高效率的流作为参数传递给缓冲区的构造函数
  • 缓冲区的原理就是在缓冲区中封装了一个数组,存入数据后一次取出

BufferedWriter

构造方法摘要

1
2
BufferedWriter(Writer out)  //创建一个使用默认大小输出缓冲区的缓冲字符输出流。 
BufferedWriter(Writer out, int sz) // 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。

常用方法

1
2
3
4
5
6
void close()                                //关闭此流,但要先刷新它。 
void flush() //刷新该流的缓冲。
void newLine() //写入一个行分隔符。
void write(char[] cbuf, int off, int len) //写入字符数组的某一部分。
void write(int c) //写入单个字符。
void write(String s, int off, int len) //写入字符串的某一部分。

使用演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriterDemo {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("F:\\demo.txt");
BufferedWriter buffWriter = new BufferedWriter(fw);

for (int i = 1; i < 5; i++) {
buffWriter.write("java" + i);
buffWriter.newLine();
buffWriter.flush();
}

buffWriter.close();
}
}
  • BufferedWriter 中的 newLine 方法可以实现跨平台的换行符
  • BufferedWriter 中的 close 方法也会将缓冲区中的流对象关闭

BufferedReader

构造方法摘要

1
2
BufferedReader(Reader in)   //创建一个使用默认大小输入缓冲区的缓冲字符输入流。 
BufferedReader(Reader in, int sz) //创建一个使用指定大小输入缓冲区的缓冲字符输入流。

常用方法

1
2
3
4
void close()                                //关闭该流并释放与之关联的所有资源。 
int read() //读取单个字符。
int read(char[] cbuf, int off, int len) //将字符读入数组的某一部分。
String readLine() //读取一个文本行。

使用演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderDemo {
public static void main(String[] args) throws IOException {

FileReader fr = new FileReader("F:\\demo.txt");
BufferedReader buffReader = new BufferedReader(fr);

String line = null;
while ((line = buffReader.readLine()) != null) {
System.out.println(line);
}

buffReader.close();
}
}
  • BufferedReaderreadLine 方法会读取一整行文本,如果已到达流末尾,则返回 null
  • BufferedReaderclose 方法也会将缓冲区中的流对象关闭

综合练习

通过缓冲区拷贝文本文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedCopyDemo {
public static void main(String[] args) {

BufferedReader buffReader = null;
BufferedWriter buffWriter = null;

try {
buffReader = new BufferedReader(new FileReader("F:\\demo.txt"));
buffWriter = new BufferedWriter(new FileWriter("F:\\demoCopy.txt"));

String line = null;
while ((line = buffReader.readLine()) != null) {
buffWriter.write(line);
buffWriter.newLine();
buffWriter.flush();
}
} catch (IOException e) {
throw new RuntimeException("文件拷贝失败");
} finally {


try {
if (buffReader != null)
buffReader.close();
if (buffWriter != null)
buffWriter.close();
} catch (IOException e) {
throw new RuntimeException("文件拷贝失败");
}
}
}
}