近日学习IO知识的时候对于BufferedReader和FileReader的差别不是很理解,如果说BufferedReader是对于FileReader添加了一个缓冲区,那么FileReader不是本来就存在缓冲区吗?

对比源码我们发现,BufferedReader继承了Reader的read(char[] buf)方法,而改写了read()和read(char[] buf, int off, int len)方法,使用read(char[] buf)方法的效果一样,都是读取到数组中,然后从数组中读取数据,但是read()方法,一次只读一个字符,BufferedReader覆盖了Reader的read方法,BufferedReader会将字符数据读取到一个数组中,相当于调用了bufr.read(buf)方法,然后再从这个缓存区中一个一个的读取字符数据。

这是BufferedReader的read方法的源码,我们发现,即使是对于一个字符数据的读取,BufferedReader依旧是先读取一个数组的数据到缓冲区中,然后从缓冲区中一个个的取,对于read方法而言,BufferedReader是比FileReader进行了优化,减少了io操作,但是对于read(char[] buf)的操作而言,两个类都继承与Reader,所以并没有差别。

public int read() throws IOException{

synchronized(lock){

ensureOpen();

for(;;){

// 若“缓冲区的数据已经被读完”,

// 则先通过fill()更新缓冲区数据,这里可以看出,先将字符数据缓冲到cb数组中,再从cb中取(这里的cb是定义于bufferedReader里面的一个private数)

if(nextChar >= nChars) {

fill();

if (nextChar >= nChars)

return -1;

}

if (skipLF) {

skipLF = false;

if (cb[nextChar] == '\n') {

nextChar++;

continue;

}

}

// 返回下一个字符

return cb[nextChar++];

}

}

}

bufferreader java_Java - BufferedReader对比FileReader到底哪里进行了优化相关推荐

  1. BufferedReader和FileReader的区别

    BufferedReader和FileReader的区别 ​ BufferedReader和BufferedWriter在内存中会自带一个8kb的字节缓冲区,并且他提供了一个程序员比较喜欢用的方法re ...

  2. InputStream Reader FileInputStream BufferedReader InputStreamReader FileReader FileInputStream和转换流

    原文地址,转发备忘 https://blog.csdn.net/liu940204/article/details/79994467 ava.io下面有两个抽象类:InputStream和Reader ...

  3. 漫谈grpc 4:grpc和其他rpc框架的横向对比,到底好在哪里?

    1,什么是grpc gRpc 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计.目前提供 C.Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc- ...

  4. 对比java_java集合对比

    list与Set.Map区别及适用场景 1.List,Set都是继承自Collection接口,Map则不是 2.List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复, ...

  5. foo java_Java的类型参数通配符到底意味着什么? Foo和Foo ?之间的真正区别是什么?...

    对于通用接口: public interface Foo { void f(T t); } 两个字段之间的区别: public class Bar { Foo foo1; Foo> foo2; ...

  6. 广告中oCPX到底是如何进行优化的?

    自从Facebook引入oCPM出价以来,国内的头条广告.微信广点通.百度信息流都陆续推出了自己的oCPX出价,oCPX出价已经成为主流广告投放平台的标配. 简单而言,oCPX是一种出价机制,允许广告 ...

  7. 广告中oCPX到底是如何进行优化的

    自从Facebook引入oCPM出价以来,国内的头条广告.微信广点通.百度信息流都陆续推出了自己的oCPX出价,oCPX出价已经成为主流广告投放平台的标配. 简单而言,oCPX是一种出价机制,允许广告 ...

  8. 繁體與簡體之間的轉化

    中文簡體與繁體之間的轉換方便之處在於每一個簡體字與每一個繁體字一一對應.這樣我們就可以利用map.對每一個字符進行一一轉換. import java.io.BufferedReader; import ...

  9. 繁体与简体之间的转化

    中文简体与繁体之间的转换方便之处在于每一个简体字与每一个繁体字一一对应.这样我们就可以利用map.对每一个字符进行一一转换. 一下是代码. import java.io.BufferedReader; ...

最新文章

  1. GRE over IPSEC ×××
  2. 数据不够,Waymo用GAN来凑:生成逼真相机图像,在仿真环境中训练无人车模型...
  3. 【Linux系统编程】线程同步与互斥:POSIX无名信号量
  4. 你为什么需要在64位系统下用32位程序
  5. 001@多用派发队列,少用同步锁
  6. java redis set list_RedisTemplate的各种操作(set、hash、list、string)_lichuangcsdn的博客-CSDN博客...
  7. WebStorm按Tab建快速生成代码模块
  8. Golang基本变量
  9. 从身份证管理系统思考企业CMDB的建设
  10. linux 内核任务调度,Linux任务调度
  11. 半导体科普:封装,IC 芯片的最终防护与统整
  12. Dvorak or qwert?
  13. 软件测试的术语SRS,HLD,LLD,BD,FD,DD意义
  14. linux中解压文件到root,linux(centos8):使用zip/unzip压缩和解压缩文件
  15. php设置pst时区,PHP时区标识符含义
  16. 美颜sdk算法总概——美白
  17. OMAPL138报Error connecting to the target:Connect to PRSC failed解决办法
  18. 调试串口导致烧录失败
  19. 2015年,我从国内二线城市来到日本东京工作生活
  20. 实测:TB级倾斜摄影模型合并根节点前后加载效果对比,结果惊人

热门文章

  1. 镜像迁移到registry_数据库迁移了解一下
  2. VSAN效能监控利器-VSAN Observer
  3. 检查vCenter Server上STS证书的过期日期(79248)(STS证书过期,导致 vCenter 报503无法登陆VC)
  4. Mysql学习总结(65)——项目实战中常用SQL实践总结
  5. Vue.js学习总结(2)——Vue.js2.X + ElementUI开发环境搭建
  6. Spring MVC学习总结(11)——Spring MVC集成Swagger跨域问题
  7. Java基础学习总结(38)——Lombok(消除冗长的 java 代码)的使用和原理及安装、入门使用
  8. 富士康java应届生工资待遇_应届毕业生入职富士康渠道不一样,收入相差悬殊...
  9. sysbench压力工具报错:
  10. js进阶 11-15 jquery过滤方法有哪些