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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Uncle.Lee 中级黑马   /  2013-11-17 12:29  /  1119 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

使用模拟BufferedInputStream类的功能,自定义的MyBufferedInputStream类复制MP3

发现复制成功了,复制出来的MP3和原文件大小相同,但是就是播放不了。。

求大神给看下那儿出错了。。
  1. //通过缓冲流复制MP3

  2. package day19;

  3. import java.io.BufferedOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;

  7. public class MP3CopyDemo {
  8.         public static void main(String args[]) {
  9.                 MyBufferedInputStream bufis = null;
  10.                 BufferedOutputStream bufos = null;
  11.                 try {
  12.                         bufis = new MyBufferedInputStream(new FileInputStream(
  13.                                         "D:\\KuGou\\张杰 - 我们都一样.mp3"));
  14.                         bufos = new BufferedOutputStream(new FileOutputStream(
  15.                                         "D:\\张杰 - 我们都一样.mp3"));
  16.                         int bt = 0;
  17.                         while ((bt = bufis.read()) != -1) {
  18.                                 bufos.write(bt);
  19.                         }
  20.                 } catch (IOException e) {
  21. //                        throw new RuntimeException("复制文件失败");
  22.                         e.printStackTrace();
  23.                 } finally {

  24.                         try {
  25.                                 if (bufis != null)
  26.                                         bufis.close();
  27.                         } catch (IOException e) {
  28.                                 throw new RuntimeException("关闭输入流失败");

  29.                         } finally {
  30.                                 try {
  31.                                         if (bufos != null)
  32.                                                 bufos.close();
  33.                                 } catch (IOException e) {

  34.                                         throw new RuntimeException("关闭输出流失败");
  35.                                 }
  36.                         }
  37.                 }

  38.         }

  39. }
复制代码
  1. //模拟BufferedInputStream
  2. package day19;

  3. import java.io.IOException;
  4. import java.io.InputStream;

  5. public class MyBufferedInputStream {
  6.         private InputStream is=null;
  7.         private int count=0,pos=0;
  8.         MyBufferedInputStream(InputStream is){
  9.                 this.is=is;
  10.         }
  11.         public int read() throws IOException{
  12.                 byte bt[]=new byte[1024];
  13.                 if(count==0){
  14.                         count = is.read(bt);
  15.                         if(count<0)
  16.                                 return -1;
  17.                         pos=0;
  18.                         byte b=bt[pos];
  19.                         pos++;
  20.                         count--;
  21.                         return b&0xff;
  22.                 }else if(count!=0){
  23.                         byte b=bt[pos];
  24.                         pos++;
  25.                         count--;
  26.                         return b&0xff;
  27.                 }
  28.                 return -1;
  29.         }
  30.         public void close() throws IOException{
  31.                 is.close();
  32.         }
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 常来云七提问和回答哈~~奖励丰厚.

查看全部评分

2 个回复

倒序浏览
希望对你有帮助,这是读取缓冲的原因,如果是你那样的话,那就是一直读取流中的开始,没有连续读取,那么当然歌曲的字节是乱的。我认为是这样的,,如果你不认为是这样的,那么认真思考一下!

无标题.png (24.13 KB, 下载次数: 9)

无标题.png

点评

3Q 果然OK了  发表于 2013-11-17 16:11
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马