黑马程序员技术交流社区

标题: io流中的缓冲 [打印本页]

作者: kj1989    时间: 2014-4-7 21:30
标题: io流中的缓冲
缓冲技术的原理是什么?为什么能有效的提高效率与字符数组有何异同呢?
作者: 张治国    时间: 2014-4-7 21:48
本帖最后由 张治国 于 2014-4-7 21:58 编辑

原理就是将数组进行封装。
缓冲的存在是为了增强流的功能,因此在建立缓冲的字符流对象时,要先有流对象的存在。

BufferedReader的特有方法:public String readLine();//一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。

BufferedWriter的特有方法:public void newLine();//写出平台相关的行分隔符来标记一行的终止。Windows平台下为’\r\n’。

作者: 梦幻    时间: 2014-4-7 21:49
缓冲就相当于一个我们定义了一个大的容器,比如说在io流中,如果我们没有定义缓冲区,那么我们在向文件中写数据时就是读取一个,写进一个。但是当我们定义了缓冲区后,我们就可以一次性把所有的数据全部写入缓冲区,然后在一次性写入文件,这样就节省了我们的读写时间,也就是提高了效率。比如io流中的BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
上面四个都是缓冲区

数组是我们用于存储数据的一个容器,要读写时我们一般要借助循环,是一个一个元素进行操作的。与缓冲区是两个完全独立的概念
作者: Monkey·D·Chas    时间: 2014-4-7 22:20
缓冲。 描述一下。就是你去商店买瓜子。 假如 你用手抓的话 顶多抓两把。 如果你用袋子装呢  就可以装很多。 那个袋子就是缓冲区。
作者: 1453149997    时间: 2014-4-7 22:21
本帖最后由 1453149997 于 2014-4-7 22:24 编辑

拿字节流来说,原理就是内部封装了一个适当大小的字节数组(即缓冲区),
(1)读取时,每次把缓冲区读满,此后读取时直接从缓存区里取,缓冲区空了再从文件里读取数据到缓冲区;
(2)写入时,不直接往文件里写,而是先写到缓冲区,缓冲区满了再一次性写到文件里,写完后,再往缓冲区写,缓冲区满了再往文件里写......;
之所以提高效率,是因为减少了硬盘磁头来回移动的次数;
作者: lilin202011    时间: 2014-4-7 23:38
如果不用缓冲流的话,程序是读一个数据,写一个数据。这样在数据量大的程序中非常影响效率。 缓冲流作用是把数据先写入缓冲区,等缓冲区满了,再把数据写到文件里。这样效率就大大提高了。
作者: 向阳泪无痕    时间: 2014-4-8 08:35
缓冲其实本身内部也是由一个数组来实现的,只是它的容量是可变的,会根据须要变化。
为什么可以提高效率呢?
当我们在复制一个文件的时候,如果你是读取一个字符写入一个字符,这样是不是显得比较慢呢?
如果是先读取一大批数据,然后一次性,将这些数据写入到文件中去,这样就少了好多操作,写得也快。
好比我们去拿东西,你是一个一个的拿快呢,还是直接拿个袋子,一次性拿回来快呢?这就不用说了吧!

作者: 清风木扬    时间: 2014-4-9 20:04
缓冲技术的原理:将数据存储到数组,读取从数组中读,当数组读完后再读一批数据到数组中,接着从数组中读。这样可降低与资源的访问次数,从而提高效率。





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