黑马程序员技术交流社区

标题: 求高手解释IO流中,缓冲区的问题 [打印本页]

作者: xiaoHei    时间: 2013-5-14 02:13
标题: 求高手解释IO流中,缓冲区的问题
本帖最后由 xiaoHei 于 2013-5-14 13:44 编辑

我们知道,在向文件中写入数据时,使用缓冲区要比一个字节一个字节的写数据效率高很多。
但是,计算机在真正的向硬盘中写数据时,都是一个字节一个字节的写的。
问题1:都是一个字节一个字节的向文件中写数据,效率高在哪里?
问题2:有人说:”使用缓冲区可以减少对硬盘的访问次数。“,这句话对不对?
            我想了解了上个问题,这个问题也就容易理解了。
所以请大神,解释使用缓冲区和不使用缓冲区,到底有什么区别。
谢谢。

作者: 曹睿翔    时间: 2013-5-14 02:13
本帖最后由 曹睿翔 于 2013-5-14 07:15 编辑

问题1:高效,可以举出很多现实例子,搬运货物,在能力范围内,一次多搬运点是不是比一次拿一点点效率要高?因为每次搬运的动作还有很多开销,不管你是弯腰的次数、走路的路程(跟计算机一样,当有缓冲区时,相当于有一个篮子工具,可以放进去数据,一次性搬运很多,避免多次调用底层资源多次读写)
问题2:这个是对的,不过IO流的目的不一定是硬盘,可以是内存、可以是屏幕,当输出是硬盘的话,把数据装在缓冲区(内存的读写效率比硬盘高了去了,笔记本性能的优劣还看二级三级缓存的大小),一次性读出、写入,会节省开销,记住调用底层资源是很浪费资源的事

像这些概念性东西,搜搜论坛你就知道了

http://bbs.itheima.com/forum.php?mod=viewthread&tid=35369&highlight=%E7%BC%93%E5%86%B2%E5%8C%BA
http://bbs.itheima.com/forum.php?mod=viewthread&tid=35986&highlight=%E7%BC%93%E5%86%B2%E5%8C%BA
作者: 黑马伍哲沂    时间: 2013-5-14 06:59
1、一个例子,我们吃花生。要将花生壳扔到门口的垃圾篓里。花生在房间桌子上。你可以选择吃一粒花生,就跑到门口将壳扔到垃圾篓,
再跑回来吃第二粒花生,以此类推。也可以用个塑料袋把花生壳装起来,等吃完了,再跑到门口把花生壳一次倒进垃圾篓。
两种方法都是一粒一粒吃的。但是第一种要来回折腾,浪费时间,效率低。

2、第一种方法,我们每吃完一粒花生就要访问一次垃圾篓,第二种方法,只要访问几次或一次就可以。所以,第二句话是对的。

另外,cpu在io设备上的读写(如硬盘)比cpu在内存中的读写是要慢很多的。(内存读写比硬盘读写快的多,这一点应该没问题很好理解),
缓冲区就是一块内存区,它用在io设备和cpu之间,所以,缓冲区,可以缓冲高速cpu与内存,内存与其它io设备之间速度不匹配的情况。减少
对io设备的读写次数,提高效率。



作者: 罗海清    时间: 2013-5-14 07:34
擦,看到回复,我自己的观点就不再是我的观点了,我不写答案了,前辈都对了
作者: 袁梦希    时间: 2013-5-14 09:48
罗海清 发表于 2013-5-14 07:34
擦,看到回复,我自己的观点就不再是我的观点了,我不写答案了,前辈都对了 ...

没事的  说说自己的观点,促进一下学习。很好的  :kiss:
作者: 王溢君    时间: 2013-5-14 12:04
你的数据都在硬盘里,一下子全部拿到内存,肯定比你分几次拿快。
作者: simonqian    时间: 2013-5-14 13:19

1,使用缓冲就是把你要写的数据先一个一个的放到缓冲中,然后等你写完了,再一次性从缓冲中写入到你的目的地中,打个比方:你去买10个苹果,买一个回一次家然后再去买,这是不使用缓冲的;使用缓冲的是你去买10个苹果,一次性买了10个,然后再回家,显然后者是效率更高吧!
2,就跟你买苹果一样,家就好比你的硬盘,你买一个回一次家,买10个就得回10次,而使用缓冲,同样买10个苹果就只要回一家就行了,所以当然是使用缓冲的读写次数少了呀!
希望对你有所帮助!





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