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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 神马 于 2014-5-10 10:48 编辑

毕老师视频里编写的字节流缓冲器MyBufferedInputStream复制一个Mp3是三百多毫秒,用JAVA库中的BufferedInputStream复制同样的Mp3是五百多毫秒。原理应该是一样的,为什么毕老师的要快,那JAVA库里的BufferedInputStream为什么不优化一下?

4 个回复

倒序浏览
:)记不清原视频的细节了,但是我猜可能有2点原因:毕老师的缓冲区数组是在时间里面定义的吗?如果在外面就节省了一部分时间;java自身的实现附加了很多安全判断,比如流是否为空啊之类的,为了安全牺牲了一些速度。
回复 使用道具 举报
这个速度是会变化的。你多试几次,就有可能是毕老师的比较慢了。
回复 使用道具 举报
Yov正 发表于 2014-5-10 09:50
记不清原视频的细节了,但是我猜可能有2点原因:毕老师的缓冲区数组是在时间里面定义的吗?如果在外面就 ...

时间计算是从main函数开始到结束,所以外部条件应该是一样的,不过你说的很有道理,应该是锁这类安全判断的原因,我刚刚去看了BufferedInputStream的源码,里面的方法大都是同步的,比如 public synchronized int read() throws IOException {。。。
多谢指点。
回复 使用道具 举报
小周务商 发表于 2014-5-10 10:09
这个速度是会变化的。你多试几次,就有可能是毕老师的比较慢了。

现在明白了,应该是同步的原因,毕老师的缓冲区没有加锁,省去了安全判断,所以快。而JAVA库里的每read一次都要进行一次synchronized判断,所以慢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马