A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kj1989 中级黑马   /  2014-4-7 21:30  /  1683 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

缓冲技术的原理是什么?为什么能有效的提高效率与字符数组有何异同呢?

7 个回复

倒序浏览
本帖最后由 张治国 于 2014-4-7 21:58 编辑

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

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

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

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
缓冲就相当于一个我们定义了一个大的容器,比如说在io流中,如果我们没有定义缓冲区,那么我们在向文件中写数据时就是读取一个,写进一个。但是当我们定义了缓冲区后,我们就可以一次性把所有的数据全部写入缓冲区,然后在一次性写入文件,这样就节省了我们的读写时间,也就是提高了效率。比如io流中的BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
上面四个都是缓冲区

数组是我们用于存储数据的一个容器,要读写时我们一般要借助循环,是一个一个元素进行操作的。与缓冲区是两个完全独立的概念

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
缓冲。 描述一下。就是你去商店买瓜子。 假如 你用手抓的话 顶多抓两把。 如果你用袋子装呢  就可以装很多。 那个袋子就是缓冲区。
回复 使用道具 举报
本帖最后由 1453149997 于 2014-4-7 22:24 编辑

拿字节流来说,原理就是内部封装了一个适当大小的字节数组(即缓冲区),
(1)读取时,每次把缓冲区读满,此后读取时直接从缓存区里取,缓冲区空了再从文件里读取数据到缓冲区;
(2)写入时,不直接往文件里写,而是先写到缓冲区,缓冲区满了再一次性写到文件里,写完后,再往缓冲区写,缓冲区满了再往文件里写......;
之所以提高效率,是因为减少了硬盘磁头来回移动的次数;

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
如果不用缓冲流的话,程序是读一个数据,写一个数据。这样在数据量大的程序中非常影响效率。 缓冲流作用是把数据先写入缓冲区,等缓冲区满了,再把数据写到文件里。这样效率就大大提高了。
回复 使用道具 举报
缓冲其实本身内部也是由一个数组来实现的,只是它的容量是可变的,会根据须要变化。
为什么可以提高效率呢?
当我们在复制一个文件的时候,如果你是读取一个字符写入一个字符,这样是不是显得比较慢呢?
如果是先读取一大批数据,然后一次性,将这些数据写入到文件中去,这样就少了好多操作,写得也快。
好比我们去拿东西,你是一个一个的拿快呢,还是直接拿个袋子,一次性拿回来快呢?这就不用说了吧!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
缓冲技术的原理:将数据存储到数组,读取从数组中读,当数组读完后再读一批数据到数组中,接着从数组中读。这样可降低与资源的访问次数,从而提高效率。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马