黑马程序员技术交流社区

标题: 关于缓冲区的概念<已解决> [打印本页]

作者: 吴扬    时间: 2012-6-7 10:29
标题: 关于缓冲区的概念<已解决>
本帖最后由 吴扬 于 2012-6-18 01:25 编辑

看视频学习,其中很多地方都提到了缓冲区这一概念,但是对缓冲区的理解还是很模糊,缓冲区具体在计算机中到底是怎么体现的呢?是内存还是什么呢?

作者: 刘克方    时间: 2012-6-7 10:54
本帖最后由 刘克方 于 2012-6-7 10:58 编辑

是内存,可以自定义缓冲区的大小;当数据在程序(内存)与其他设备间传输时(如硬盘);如果没有缓冲区,每次只能写入一个字节效率很低;有了缓冲区我们可以将要写入硬盘的数据暂存在内存中,当数据达到一定长度,一次性的写入,提供读写效率
作者: 孙峰    时间: 2012-6-7 12:29
       源自百度:缓冲区为暂时置放输出或输入资料的内存。   缓冲区内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。   缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速部件通讯时,必须将高速部件的输出暂存到某处,以保证高速部件与低速部件相吻合. 后来这个意思被扩展了,成为"临时存贮区"的意思。

缓冲区根据其对应的输入设备还和输出设备,分为输入缓冲区和输出缓冲区。

  缓冲区的作用
  缓冲区的作用是为了解决速度不匹配的问题,高速的cpu与内存,内存与硬盘,cpu与io等速度不匹配的问题,而引人缓冲区,比如我们从磁盘里读取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中读取数据,等缓冲区的数据读取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。   缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低俗的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU。解放出CPU,使其能够高效率工作。
作者: 吴扬    时间: 2012-6-7 21:17
孙峰 发表于 2012-6-7 12:29
源自百度:缓冲区为暂时置放输出或输入资料的内存。   缓冲区内资料自储存设备(如硬盘)来,放置 ...

大概有点概念了,那BufferedReader和StringBuffer这两个类产生的缓冲区的原理是一样的吗?
作者: 朝哥    时间: 2012-6-7 21:40
举个通俗的例子,假如没有缓冲区(在内存中),你直接把c盘的文件复制到D盘,硬盘的磁头在做高速的来回切换。而你有了缓冲区,你可以先把数据先集中到内存中,然后在将内存中的数据全部复制到d盘中,有没有发现,硬盘的磁头不需要来回切换了,他只需要在c盘转转,然后在d盘转换就行了。
再举个例子,你用筷子吃花生米,你一个一个夹着吃,肯定不爽了,ok,来个勺子,我让花生装满勺子,然后一口干掉,那勺子就是缓冲区。
只要是能储存的东西都可以用做缓冲区,我们学过的集合、数组都可以。
作者: 雷云红    时间: 2012-6-7 21:51

缓冲区是用于存放某一类型固定数量数据的容器。每个缓冲区内部都存储了它的状态信息,这使得缓冲区比数组更加方便。使用数组,程序员必须从外部管理起始点、长度以及数组内有效数据的范围。然而,方便还不是使用缓冲区的原因。缓冲区具有优越的性能来引用系统空间中分配的内存(由操作系统内核管理的内存);与普通的引用对象不同的是,它驻留在Java 堆(由Java 虚拟机器 [JVM] 分配并由垃圾收集器管理)中。将数据控制在系统内存支持高级功能,如直接存储器存取 (DMA)—不需要 CPU 的介入就能在设备间移动数据。甚至没有 DMA,此方法也支持更快的输入/输出以及与外部设备间的数据交换,因为它在输出数据以前不需要先将 Java 堆中的数据复制到系统内存中,也不需要复制输入的数据。使用系统内存的功能也可以启用内存映像文件,使得操作系统虚拟内存可以提供对较大的文件进行高速
再补充一哈:Java提供了七个基本的缓冲区,分别由七个类来管理
ByteBuffer

  ShortBuffer

  IntBuffer

  CharBuffer

  FloatBuffer

  DoubleBuffer

  LongBuffer
具体使用参考老毕的基础视频。不在详细说。
作者: 雷云红    时间: 2012-6-7 21:52
楼主这次应该懂了吧
作者: 吴扬    时间: 2012-6-8 00:45
朝哥 发表于 2012-6-7 21:40
举个通俗的例子,假如没有缓冲区(在内存中),你直接把c盘的文件复制到D盘,硬盘的磁头在做高速的来回切换 ...

谢谢,这个吃花生米的例子比较形象,呵呵!
作者: 郑传庆    时间: 2012-6-8 01:11
缓冲区就用来暂时存储数据的提高程序执行的效率。举个例子:假如从硬盘上读取一个字符“缓冲区”,磁头每次都都要从这个磁盘(如C盘)上读一个字符,都跑到另一个磁盘(如D盘)上写一个字符。这样读取的效率就会较慢。可是如果C盘把要读取的字符全部读取完,然后磁头在移动到D盘写信息的话,这样的效率就会很快,这时就需要创建一个缓冲区,用来存放。
作者: 吴扬    时间: 2012-6-9 12:21
谢谢大家的回答,现在对缓冲区的概念理解更加深入点了!




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