BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in = new BufferedReader(new FileReader("in.txt"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。
意思就是在读文件的时候,要是不使用缓冲的话,读一个就得转换成字符,效率低。(文件是二进制的数字哦基本单位就是字节了)
//读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
//返回:包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
readLine():
字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法 readLine,方便于对文本数据的获取。
当返回null时,表示读到文件末尾。
注意:
readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。所有再把数据写出去的时候,还得把整个换行符给补上去哟。
下面是测试代码例子:使用上次BufferedWriter生成的文件来测试。
package com.lxk.FileTest;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* 一行一行的读取文件到内存中,然后打印输出到控制台
*/
class BufferedReaderDemo {
public static void main(String[] args) {
BufferedReader bufr = null;
try {
//创建一个字符读取流对象和文件相关联。
FileReader fr = new FileReader("buf.txt");
//为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
bufr = new BufferedReader(fr);
String line;
try {
while ((line = bufr.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} finally {
if (bufr != null) {
try {
bufr.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}
}
BufferedReader的构造函数如下:
public BufferedReader(Reader in) {
this(in, defaultCharBufferSize);
public BufferedReader(Reader in, int sz) {
super(in);
if (sz <= 0)
throw new IllegalArgumentException("Buffer size <= 0");
this.in = in;
cb = new char[sz];
nextChar = nChars = 0;
}
BufferedReader Java 全部继承关系图: