黑马程序员技术交流社区

标题: 毕老师视频里编写的缓冲器为什么比JAVA库里的还快 [打印本页]

作者: 神马    时间: 2014-5-10 09:36
标题: 毕老师视频里编写的缓冲器为什么比JAVA库里的还快
本帖最后由 神马 于 2014-5-10 10:48 编辑

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

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

时间计算是从main函数开始到结束,所以外部条件应该是一样的,不过你说的很有道理,应该是锁这类安全判断的原因,我刚刚去看了BufferedInputStream的源码,里面的方法大都是同步的,比如 public synchronized int read() throws IOException {。。。
多谢指点。

作者: 神马    时间: 2014-5-10 10:48
小周务商 发表于 2014-5-10 10:09
这个速度是会变化的。你多试几次,就有可能是毕老师的比较慢了。

现在明白了,应该是同步的原因,毕老师的缓冲区没有加锁,省去了安全判断,所以快。而JAVA库里的每read一次都要进行一次synchronized判断,所以慢了。




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