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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

关于使用字节流拷贝Mp3过程中,使用了BufferedInputStream和BufferedOutputStream,这已经是字节流缓冲区,但当我在其中使用了byte[] buf = new byte[1024]后,是不是相当于又使用了一层缓冲?这样是不是与Buffered重复了?按这样考虑的话效率应该降低,但是经过实践,发现在缓冲中加入了自定义数组后,大幅提高了复制效率(通过复制所需时间发现)。这是为什么?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

8 个回复

倒序浏览
你不用数组的话它是一个一个字节往Bufffe里存,然后再写到文件内。
定义数组后是一次1024个字节往Buffer里存。然后再写到文件内。肯定会效率更高的。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
刘占月 发表于 2012-4-12 15:01
你不用数组的话它是一个一个字节往Bufffe里存,然后再写到文件内。
定义数组后是一次1024个字节往Buffer里 ...

定义了数组不也是一个字节一个字节地存入数组么?本来Buffered相当于一个接水滴的水杯,我又重新搞了一个数组,不是应该相当于又找了一个水杯,然后把Buffered里的水倒入数组水杯,然后再用么?其中多了一个水杯,效率应该下降吧。Buffered内部封装了数组,我那么做的话就是将数组转存到另一个数组了,步骤多了,应该更加耗时吧。
回复 使用道具 举报
施俊 发表于 2012-4-12 15:44
定义了数组不也是一个字节一个字节地存入数组么?本来Buffered相当于一个接水滴的水杯,我又重新搞了一个 ...


你从地点a 往地点b 送东西
1 把东西装到箱子里 在装到车里  在运送过去
2 把东西一个一个的送到b地点  或者把东西装到箱子里面 一箱一箱送往b地点
那个快?   在1中 数组是箱子,burfferred是汽车~~~!
回复 使用道具 举报
播放器我做过,楼上的比喻已经相当贴切了,想拿技术分都不知道该说什么了,拿个金币算了
回复 使用道具 举报
BufferedInputStream和BufferedOutputStream底层封装了数组,用于把目的地的数据一个字节一个字节读取或写到它里面的数组缓存起来,而再定义一个数组是为了把BufferedInputStream和BufferedOutputStream底层数组里面的上数据一次性的写入到或读取到新定义的数组里面,从而可以实现数据的高效写入和读取,它底层的数组是和硬盘打交道的,而从新定义的数组是个这个缓冲流打交道的
回复 使用道具 举报
麻烦楼上看看api 源码在说吧 都是调用FileInputStram的readByte方法 传进的数组大小不一样 ,一次io的数据当然不一样,效率当然不一样,别问我硬盘io包括什么时间 哥不是黑马学员 来玩玩
回复 使用道具 举报
舒远 黑马帝 2012-9-9 00:18:42
8#
就好比我们喝水吧,我们可以一滴一滴的喝,也可以一杯一杯的喝,但是没人会一滴一滴的这么干吧?当然是一口干掉水杯中的水比较爽啦!
但是水杯中的水也是一滴一滴的汇集而成的整体(这时候我们可以把水杯当成缓冲区,水滴就是字节)。我们可以将水滴汇集到杯中后再喝,这就是缓冲区的作用。
回复 使用道具 举报
看看...............
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马