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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 爽朗的菜籽 中级黑马   /  2014-9-22 19:54  /  1134 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;


  2. public class Copy_mp3_1
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 FileInputStream fis = null;
  7.                 FileOutputStream fos = null;
  8.                 try
  9.                 {
  10.                         fis = new FileInputStream("G:\\JAVA\\平凡之路.mp3");
  11.                         BufferedInputStream bis = new BufferedInputStream(fis);
  12.                         fos = new FileOutputStream("G:\\JAVA\\平凡之路_2.mp3");
  13.                         BufferedOutputStream bos = new BufferedOutputStream(fos);
  14.                         int ch = 0;
  15.                         while((ch=bis.read())!=-1)
  16.                         {
  17.                                 bos.write((char)ch);
  18.                         }
  19.                 } catch (IOException e)
  20.                 {
  21.                         e.printStackTrace();
  22.                 }
  23.                
  24.         }
  25. }
复制代码

以上是我的代码,只是复制出来的MP3和原来的MP3大小有些微小的差别这是为什么啊,不用缓冲的话大小事一样的,是我的代码哪里不对吗

6 个回复

倒序浏览
bos.write((char)ch); mp3复制用字节流,转成char干啥?
回复 使用道具 举报
你这样读取就是和不用缓冲没去别好吗  这样也是单个字符读取的  你没有定义数组
回复 使用道具 举报
本帖最后由 张丽丹 于 2014-9-22 20:31 编辑

复制完之后,  调用下,bos.flush();此外提一下,你这样做的效率会很低,不要一个一个字节来读取,应该是:
byte[] data=new byte[10*1024];
int n=br.read(data);
while(n!=-1){
fw.write(data,0,n);
n=br.read(data);
}
fw.flush();
fw.close();//复制完之后不要忘了加一个finally把读写流关掉,
回复 使用道具 举报
我是过来学习的
回复 使用道具 举报
梧桐树下 来自手机 中级黑马 2014-9-22 23:21:05
地板
关流就一样了
回复 使用道具 举报
yueyazhishang 来自手机 高级黑马 2014-9-22 23:44:18
7#
手机查看,待我明天给你发代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马