缓冲就是提高效率用的,若不用缓冲相当于读一个写一个,用个缓冲相当于读一堆写一堆。
通常见到的读写流的基类中都定义了自己的缓冲子类,目的就是为了增加效率的。
其实如果模拟一下缓冲的源代码你就会很清晰了,这面是一段一次读一行的代码
// readLine()原理,自定义一个功能和readLine一致的方法,模仿bufferedReader
class MybufferedReader extends Reader {
private static FileReader r;
MybufferedReader(FileReader r) {
this.r = r;
}
// 可以一次多一行数据的方法
public String myReadLine() throws IOException {
// 定义一个临时容器,原BufferedReader封装的是一个字符数组
// 为了演示方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串
StringBuilder sb = new StringBuilder();
int ch = 0;
while ((ch = r.read()) != -1) {
if (ch == '\r')
continue;
if (ch == '\n')
return sb.toString();
else
sb.append((char) ch);
}
if (sb.length() != 0)
return sb.toString();
return null;
}
// 覆盖方法
public void close() throws IOException {
r.close();
}
public int read(char[] cbuf, int off, int len) throws IOException {
// TODO Auto-generated method stub
return r.read(cbuf, off, len);
}
}
|