java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。
从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。
System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。例如:
代码
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//new 一个 reader 对象,在 new 的同时 BufferReader 开辟了一块缓存区,用以存储读到的数据;
//Java.io.BufferReader 类下方法 BufferedReader(Reader in) 内的参数为字符流格式,而 Java.lang.System.in 是一个字节流,所以要使用 InputStreamReader 将 System.in 转换成一个字符流;
String s = null;
//声明一个字符串 s 用以存放 reader 在终端上读取到的数据;
while(!(s = br.readLine()).equals("quit")){
System.out.println("data: " + s);
}
//br.readLine() 以行(可以理解为以换行符 \n 为标志)为单位对用户输入的数据进行读取;
//br.read 则是以字节
- 代码
package com.farsight.bj16081;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class BufferReaderDemon {
public static void main(String[] args) throws IOException {
// System 类, System.in 标准输入字节流 , System.out 标准输出流
// 从终端读取字符串 , Reader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 创建一个文件流
FileOutputStream fos = new FileOutputStream("test.txt");
// 向终端写数据
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 向文件写数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
// System.out.println("打印字符串:" + br.readLine());
String s;
while((s = br.readLine()) != null){
//System.out.println("" + s);
// 向终端输出, 或者向文件输出
bw.write(s);
bw.newLine();
bw.flush();
// 当遇到 quit 退出
if(s.equals("quit")){
break;
}
}
br.close();
bw.close();
System.out.println("main exit...");
}
}