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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求解:
通过字符流缓冲区拷贝MP3为什么无法播放,是因为编码的问题吗?
在硬盘上读取MP3文件时是不是把字节转成了字符,复制写入硬盘的时候又把字符转成了字节?其中涉及到编码问题了吗?
感觉懵懵哒.....
/*需求:
*  拷贝一个MP3文件
*/
import java.io.*;
public class Copy
{
        public static void main(String[] args) throws IOException
        {
                BufferedReader br=
                                new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\pan\\Desktop\\Fade.mp3")));
                BufferedWriter bw=
                                new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\pan\\Desktop\\Fade_01.mp3")));
                String line=null;
                while((line=br.readLine())!=null)
                {
                        bw.write(line);
                        bw.newLine();
                        bw.flush();
                }
                br.close();
                bw.close();
        }
}

9 个回复

倒序浏览
为什么不用字节流啊?你用字符流肯定不行啊,字符一般都纯文本啊

点评

中间加了转换流也不行吗?  发表于 2016-5-22 11:44
回复 使用道具 举报
BufferedWriter bw=
                                 new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\pan\\Desktop\\Fade_01.mp3",true)));
//加个true

点评

加个true不行吧,加true的话是向原来文件中续写数据的  发表于 2016-5-22 11:41
回复 使用道具 举报
ft352177 发表于 2016-5-22 00:20
为什么不用字节流啊?你用字符流肯定不行啊,字符一般都纯文本啊

中间不是有个转换流吗,读取的时候把字节装换成字符,写入的时候再把字符转成字节,不知道我这样理解对不对.
回复 使用道具 举报
逝水大魔王 发表于 2016-5-22 00:21
BufferedWriter bw=
                                 new BufferedWriter(new OutputStreamWriter(new F ...

...我拿你的,改了下路径 我的就可以播放了呀
回复 使用道具 举报
是不是你的文件太大,没等复制完就去播放了。
  1. package cn.heshuai;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;

  8. /*
  9. *
  10. */
  11. public class DemoShuju {
  12.         public static void main(String[] args) throws IOException {
  13.                 // 数据源
  14.                 String src = "D:\\2016\\20160420\\day18\\公益广告不用花钱.mp4";
  15.                 // 目的地
  16.                 String dest = "D:\\2016\\123\\copy1.mp4";
  17.                 // 1:指定数据源
  18.                 BufferedInputStream in = new BufferedInputStream(new FileInputStream(
  19.                                 src));
  20.                 // 2:指定目的地
  21.                 BufferedOutputStream out = new BufferedOutputStream(
  22.                                 new FileOutputStream(dest));
  23.                 // 3:读数据
  24.                 byte[] buffer = new byte[1024];
  25.                 int len = -1;
  26.                 while ((len = in.read(buffer)) != -1) {
  27.                         // 写数据
  28.                         out.write(buffer, 0, len);
  29.                 }
  30.                 // 关闭流
  31.                 in.close();
  32.                 out.close();

  33.         }
  34. }
复制代码
回复 使用道具 举报
字符流输出要查编码表,找不到就无法输出了,就会缺少了 你看下你复制的文件是不是字节少了呢
回复 使用道具 举报
拷贝全部使用字节流!!!!!字符流读取mp3文件会使用码表读取mp3中的字节,找不到码表对应的字符就会变成?之后的写也会出错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马