黑马程序员技术交流社区

标题: IO流中的缓冲区提高读写效率的原理是什么? [打印本页]

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

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

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

作者: 擒贼先擒王    时间: 2014-12-11 09:02
同意二楼的见解,顶一下!!!
作者: 与梦逆风而行    时间: 2014-12-11 09:17
额   刚学完基础   这个问题暂时还没法解答,但是比较同意二楼的观点。  
作者: GlobeMaster    时间: 2014-12-11 09:28
刚开始学习,谢谢各位的意见。
作者: fatesabering    时间: 2014-12-11 12:20
缓冲区读写流的内部封装了数组,读写时并不是一个字节读完再在另一个位置存储,而是先读一堆字符到内存数组中,这样就避免了硬盘上的来回读写,变成了内存和硬盘间的读写 提高了读写的效率
作者: zmhlnrs    时间: 2014-12-11 12:22
过来学习一下
作者: 魏文杰    时间: 2014-12-11 12:26
我也来看看这个问题。。。。菜鸟一枚
作者: qowoeo7538    时间: 2014-12-11 12:26
刚刚入门,还没看,学习下。

作者: 史云龙    时间: 2014-12-11 13:16
从内存向硬盘或者其他位置做连接,花费的时间比较长,频繁的交换会导致产生大量错误交换时间。
而将数据缓冲到内存中,到时批量输出,减少了频繁交换,自然就提高了效率。
作者: 沙子    时间: 2014-12-11 13:35
2楼的观点有说服力啊,刚学到还未深入了解,同学习。
作者: ________倔強°    时间: 2015-7-21 01:58
好,及时解决了我的疑问




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2