为了账号安全,请及时绑定邮箱和手机立即绑定

关于Java中使用BufferedReader读取文件的疑惑

关于Java中使用BufferedReader读取文件的疑惑

慕后森 2019-04-08 11:18:37
BufferedReaderin=newBufferedReader(newFileReader("foo.in"));willbuffertheinputfromthespecifiedfile.Withoutbuffering,eachinvocationofread()orreadLine()couldcausebytestobereadfromthefile,convertedintocharacters,andthenreturned,whichcanbeveryinefficient.这段话怎么理解,如果使用了缓冲区就不会涉及到byte转character?求两个读取文件的流程和效率对比,先行谢过了。
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

没有缓冲区时,每次读取操作都会导致一次文件读取操作(就是告诉操作系统内核我要读这个文件的这个部分,麻烦你帮我把它取过来)。而有缓冲区时,会一次性读取很多数据,然后按要求分次交给上层调用者。读取块大小通常是按最适合硬件的大小来读的,因为对于硬件来说,一次读取一块连续数据(比如1K)和一次读取一个字节需要的时间几乎是一样的(都是一次读操作,只是最终提交的数据量有差异)。带缓冲的I/O和不带缓冲的相比效率差异是非常显著的,你可以自行写程序测试。
                            
查看完整回答
反对 回复 2019-04-08
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

楼上的解释很好.我做一点补充:
说到javareader缓存,其实有两层缓存:
1.OS缓存,把磁盘数据读入内存,通过readahead,ioscheduler等减少磁盘读取次数.
2.App缓存,做缓存/预读,即BufferredReader的角色.
BufferredReader的作用,我的理解,一)减少SystemCall次数;二)减少磁盘读取次数.
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 372 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信