作者:貘吃馍香
链接:https://www.zhihu.com/question/29351698/answer/44192440
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
好久(>6年)没写JAVA了
查了下 JAVA 手册大致明白了楼主是要问什么
先说结论
其实就如同
说的一样
减少 IO 次数。
IO 访问是个慢操作
减少 IO 次数就是提高效率
再说原因:
貌似楼主混淆了
FileReader fileReader = new FileReader("xxx");
FileReader.read();
FileReader.read(char[] cbuf);
FileReader.read(char[] cbuf,int off, int len);
中 cbuf 的意思
FileReader 类的 read 方法三种重载形式
第一种直接读一个字符
第二种读取全部内容到 cbuf 数组中
第三种读取是指从文件off位置读入len这么长的字符串到char数组内
但这三种都是这是通过 IO 读取的内容
读一次,从 IO 获取一次数据
而 BufferedReader
BufferedReader bufReader = new BufferedReader(new FileReader("xxx"));
bufReader.read(char[] cbuf)
bufReader.read(char[] cbuf,int off, int len)
包装 FileReader 之后
它的 read 方法把数据读到 cbuf 内
就不是单纯通过 IO 了
public BufferedReader(Reader in, int sz)
构造函数本身可以接受 sz 来设置缓存大小
默认是 8192 (8k)
它开始会先从 IO 读取 8k 内容到自己设置的内存缓冲区内
调用 bufReader.read 方法时
会从 BufferedReader 缓存区中读取内容
避免每次 read 都通过 IO
实际上减少了 IO 访问次数。
同理
BufferedWriter 和 FileWriter 一样如此
因此
BufferedWriter BufferedReader 会相对更高效