想象外部文件,外部stream是一片汪洋大海。而BufferedReader在自己内部开辟了一个小水池。每次都是先把小水池填满先。
然后你调用read,就从这个水池里拿一个字符。如果水池没了,还会再继续填满水池。所以可以想象,大部分时刻,都是直接从自己内部这个小水池里读取数据,快很多。
而如果是readline也差不多。直接从水池里读取一行。
所以如果缓冲太小,设成1,那就普通的reader就没区别了。都是一个字符一个字符去读取。
如果用的idea可以直接点进去看
源码如下:
/**
* Creates a buffering character-input stream that uses an input buffer of
* the specified size.
*
* @param in A Reader
* @param sz Input-buffer size
*
* @exception IllegalArgumentException If {@code sz <= 0}
*/
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;
}
翻译下:
*创建使用输入缓冲区的缓冲字符输入流
*指定的大小。
*@param在读卡器中的应用
*@param sz输入缓冲区大小
单位应该是chart
可以请采纳
缓存区大小,缓冲区用来装每一次读取的数据。