黑马程序员技术交流社区

标题: IO字节流缓冲Buffered拷贝Mp3,再使用字节数组。 [打印本页]

作者: 施俊    时间: 2012-4-12 14:32
标题: IO字节流缓冲Buffered拷贝Mp3,再使用字节数组。
关于使用字节流拷贝Mp3过程中,使用了BufferedInputStream和BufferedOutputStream,这已经是字节流缓冲区,但当我在其中使用了byte[] buf = new byte[1024]后,是不是相当于又使用了一层缓冲?这样是不是与Buffered重复了?按这样考虑的话效率应该降低,但是经过实践,发现在缓冲中加入了自定义数组后,大幅提高了复制效率(通过复制所需时间发现)。这是为什么?
作者: 刘占月    时间: 2012-4-12 15:01
你不用数组的话它是一个一个字节往Bufffe里存,然后再写到文件内。
定义数组后是一次1024个字节往Buffer里存。然后再写到文件内。肯定会效率更高的。
作者: 施俊    时间: 2012-4-12 15:44
刘占月 发表于 2012-4-12 15:01
你不用数组的话它是一个一个字节往Bufffe里存,然后再写到文件内。
定义数组后是一次1024个字节往Buffer里 ...

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


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




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