黑马程序员——关于IO流中BufferedReader底层机制

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

在看毕向东老师基础视频关于IO流的时候,老师先讲了FileReader,以及其read()和read(char [])方法。后来老师说为了提高效率,需要用缓冲技术,用BufferedReader来封装实现。那么,这里BufferedReader用的缓冲区(字符数组)  和  FileReader用read(char [])方法中的数组有什么区别呢?两者是相同的吗?

百思不得其解,于是查看的java底层文件,终于找到了一些蛛丝马迹。

答案是否定的!要不然干嘛还多此一举的用BufferedReader类呢。事实是这样的,BufferedReader用的缓冲区字符数组是在read()前填充在的,而 FileReader用read(char [])方法中的数组是在read()后填充的。

也就是说,当我们用BufferedReader的时候,在我们调用read()方法之前,系统就已经通过底层机制将缓冲区数组一次性填好了,而我们在调用read()方法,其实读的是缓冲区里的数据。而用FileReader的时候,当调用read(char[]),我们是通过rend()方法直接调用底层机制将数据从源文件中读出一个字符。当然,为了填满数组,要调用read()很多次

因为底层机制从源文件读取数据时需要调用编码器,这需要浪费时间,所以一次只读一个字符的话,每次都要调用一次编码器,浪费了大量的时间。所以BufferedReade缓冲区技术的作用就体现出来了。

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值