黑马程序员技术交流社区

标题: 缓冲区技术的一些疑问 [打印本页]

作者: 程宏志    时间: 2012-8-3 11:53
标题: 缓冲区技术的一些疑问
    在程序中读取数据使用缓冲区技术,有点不明白的是,使用缓冲区和不使用缓冲区的区别是什么呢,老师讲的是提高效率,那这个效率是指哪方面呢?是注重指使用存储空间的高效率,还是注重指读写数据的速度。只是听老师在理论上说而已,始终有些迷惑,在程序上有没有直观的表达呢?希望高人帮忙解答下!
作者: 郑小杰    时间: 2012-8-3 12:42
IO那部分视频是不是没看啊,兄弟,这个很容易理解,比方说我要把楼下的1000本书搬到楼上,要是一本一本搬的话,哥们估计就累死了,我可以找一个箱子,在箱子里一次放上100本,这样搬10次就可以了。这个箱子就相当于临时缓冲区。缓冲区就是为了提高效率的,肯定是提高了读写速度,下边是毕老师讲课中的代码,你可以试一下
import java.io.*;
class  BufferedWriterDemo
{
public static void main(String[] args) throws IOException
{
  //创建一个字符写入流对象。
  FileWriter fw = new FileWriter("buf.txt");
  //为了提高字符写入流效率,加入了缓冲技术
  //只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
  BufferedWriter bufw = new BufferedWriter(fw);
  for (int x=0;x<5 ;x++ )
  {
   bufw.write("abcde"+x);
   bufw.newLine();
  
   bufw.flush();//只要用到缓冲区,就要记得刷新
  }
  
  
  //其实关闭缓冲区,就是在关闭缓冲区中的流对象
  bufw.close();

}
}

作者: 程宏志    时间: 2012-8-3 13:25
郑小杰 发表于 2012-8-3 12:42
IO那部分视频是不是没看啊,兄弟,这个很容易理解,比方说我要把楼下的1000本书搬到楼上,要是一本一本搬的 ...

老师讲的是这样的,但是这个体现是在理论上通过语言描述是这么回事,但是我想比较一下用于不用在程序中的直观高效率的表现形式!
作者: 尤洋    时间: 2012-8-3 14:56
本帖最后由 尤洋 于 2012-8-3 14:59 编辑
程宏志 发表于 2012-8-3 13:25
老师讲的是这样的,但是这个体现是在理论上通过语言描述是这么回事,但是我想比较一下用于不用在程序中的 ...

      缓冲区 单独从java代码的角度来看的话其实没有提高效率,该搬运多少还是得搬运多少。
但是,软件程序的运行是要依托于硬件的,他的速度既要取决于算法的高效,也要取决于计算机读取数据的高效。而缓冲区带来的高效就是从 硬盘读取 来体现的。
    假如你要将C盘的东西 复制到F盘的话, 硬盘读取的指针  就会 像搬运工一样 来回搬运数据,一次搬一个也是搬,一次搬一堆也是搬,当然是搬一堆要快一些。所以这也是为什么CPU都很好的情况下,内存条越大,电脑运行速度越快的道理。
     同理,现在的移动硬盘里 内置硬盘缓存 也是为了这个读取速度。

你所说的想要从程序上体现估计是很难得到直观认识了,因为它本来就不是从程序上体现的,而是从计算机硬件读取 的角度来体现高效的





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