A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

以操作文件的流对象为例,字符输入流缓冲区BufferedReader和字符输入流FileReader的区别就是多了个一次读取一行的方法readLine();都有读一个字符和读字符数组的方法;字符输出流缓冲区BufferedWriter比字符输出流FileWriter多了个换行方法newLine();都有写入字符和写入字符数组的方法。字节输入输出流缓冲区和字节输入输出流的方法是一样的,都是读写字符和读写字符数组。既然读写的方法是一样的,那么读写时调用系统资源的次数应该也是一样的,那么缓冲区提高读写效率的原理是什么?求解答

点评

也就是把读取和写入分开了!流先把读取的数据读到缓冲区,等到满足条件(通常是读到文件末尾或者缓冲区已经满了),再把缓冲区的内容写入目的文件!而非缓冲区则是读一个字节,就把这个字节写入目的文件,然后再读取   发表于 2014-12-11 09:00

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

12 个回复

倒序浏览

回帖奖励 +2

设置缓冲,CPU通常会使用 DMA 方式去执行 I\O 操作。CPU 将这个工作交给DMA控制器来做,自己腾出时间做其他的事,当DMA完成工作时,DMA会主动告诉CPU“操作完成”。这时,CPU接管后续工作。在此,CPU 是被动的。DMA是专门 做 I\O 与 内存 数据交换的,不仅自身效率高,也节约了CPU时间,CPU在DMA开始和结束时做了一些设置罢了。

总的来说,缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入,类似数据库的批量操作,这样效率比较高。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报

回帖奖励 +2

同意二楼的见解,顶一下!!!
回复 使用道具 举报

回帖奖励 +2

额   刚学完基础   这个问题暂时还没法解答,但是比较同意二楼的观点。  
回复 使用道具 举报

回帖奖励 +2

刚开始学习,谢谢各位的意见。
回复 使用道具 举报

回帖奖励 +2

缓冲区读写流的内部封装了数组,读写时并不是一个字节读完再在另一个位置存储,而是先读一堆字符到内存数组中,这样就避免了硬盘上的来回读写,变成了内存和硬盘间的读写 提高了读写的效率
回复 使用道具 举报
zmhlnrs 中级黑马 2014-12-11 12:22:34
7#

回帖奖励 +2

过来学习一下
回复 使用道具 举报

回帖奖励 +2

我也来看看这个问题。。。。菜鸟一枚
回复 使用道具 举报

回帖奖励 +2

刚刚入门,还没看,学习下。
回复 使用道具 举报

回帖奖励 +2

从内存向硬盘或者其他位置做连接,花费的时间比较长,频繁的交换会导致产生大量错误交换时间。
而将数据缓冲到内存中,到时批量输出,减少了频繁交换,自然就提高了效率。
回复 使用道具 举报
沙子 中级黑马 2014-12-11 13:35:29
11#

回帖奖励 +2

2楼的观点有说服力啊,刚学到还未深入了解,同学习。
回复 使用道具 举报
好,及时解决了我的疑问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马