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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾双涛 黑马帝   /  2011-9-28 20:55  /  4602 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

BufferedOutputStream类提供了flush(),write(byte[] b, int off, int len),write(int b) 方法,而这些方法OutputStream都有,那使用BufferedOutputStream还有什么作用呢?

7 个回复

倒序浏览
黑马网友  发表于 2011-9-28 21:00:50
沙发
Buffered就是带有缓存功能的,缓存就是为了提高速度而生的,速度快啊~!

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-28 21:27:26
藤椅
BufferedOutputStream属于包装类,在内部还是调用底层流类来实现的输出,速度提高了?
回复 使用道具 举报
黑马网友  发表于 2011-9-29 01:24:38
板凳
BufferedOutputStream类 是带有缓存功能的处理流,如果OutputStream会一个字节一个字节的输出,速度慢效率低,用Buffered带缓存的,输出的时候先在缓存 然后一起输出,速度快!

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 02:46:21
报纸

BufferedOutputStream类问题

我就很纳闷  没用甲骨文公司吃多了 把你应用出来,带buffer都是用来缓冲数据的 目的是提高效率
回复 使用道具 举报
buffer表示缓冲的意思,当我们把一些数据取出后可以暂时不把它拿走而是先存储起来,当存储足够多的时候再一次性的把它取走,这样就提高了效率。举个例子:我们喝水时可以对着水龙头一滴一滴的喝,但当我们拿个杯子接满水之后再大口大口的喝时间可以很快喝好,这样就提高了效率。BufferedOutputStream的作用就是为了提高写的效率而存在的。
[ 本帖最后由 王家虎 于 2011-09-29  16:54 编辑 ]

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 17:27:57
7#

回复 楼主 的帖子

相信这句话,存在必然有其道理。
我承认OutputStream有你所说的这些方法,但是我们必须要看看OutputStream的定义,查看API,其定义是这样的public [color=Red]abstract[/color] class OutputStreamextends Objectimplements Closeable, Flushable ,我们看到红色标出来的关键字,可以看出OutputStream是抽象类,不能直接实例化,而必需有子类,让子类对象来实例化它,而子类可以增加父类没有的功能,比如缓冲区功能啊等等,这样子类也就可以拥有你所说的那些方法。再来看看OutputStream的继承结构
--java.lang.Object
  ---java.io.OutputStream
      --java.io.FilterOutputStream
          --java.io.BufferedOutputStream
很明显我们可以看出BufferedOutputStream是OutputStream的子类,这样BufferedOutputStream就可以当做OutputStream对象来使用了。还有为什么我们要这样定义类的层次结构呢?首先要明白为什么要使用抽象类而不使用接口,抽象类表现的是一种is a 的关系,而接口表现是like a一种关系。输出流有各种各样的底层实现,也就出现各种各样的流,比如说缓冲流,对象流等等,但归结到底是一种流,所以把OutputStream定义成抽象类再恰当不过了,因为类之间的关系表现出一种是的关系。所以通过继承Outputstream类可以构造出不同的流。
你所说的BufferedOutputStream只不过是OutputStream中的一个子类,他比父类有更多的功能,该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统,这样也就提高的效率是不?所以用它非常有意义。

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 20:38:58
8#

首先谢谢各位的回答

我知道你们啥意思,提高效率,这个我也想到了,你们说OutputStream是抽象类,不假,那我们就以它的子类FileOutputStream为例,比较两个方法:
1.write(int b) 写一个字节,应该用不到缓冲区吧,直接写就可以了
2.write(byte[] b, int off, int len) 写一个字节数组,FileOutputStream类直接调用底层输出流来写这个数组,
BufferedOutputStream需要先把这个字节数组写到缓冲区中,然后间接调用底层输出流来写这个数组
问一下各位,哪里提高效率了?我反而觉得中间多了没必要的一步,降低效率了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马