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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王广彬 中级黑马   /  2012-8-20 00:18  /  1276 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


import java.io.*;
/*
自定义字节流缓冲区
复制mp3文件
  1:定义数组
  2:定义指针
  3:定义计数器
*/
public class Practice_自定义字节流缓冲区 {
public static void main(String[] args) throws IOException {
  CopyMp31 co=new CopyMp31();
  long start=System.currentTimeMillis();   //记录开始拷贝
  co.copy();
  long end=System.currentTimeMillis();     //记录拷贝结束时间
  System.out.println("拷贝完成:"+(end-start)+"毫秒");
}
}
class CopyMp31{
public void copy() throws IOException{
  MyBufferedInputStream bufi=new MyBufferedInputStream(new FileInputStream("D:\\Documents\\My Music\\汤灿 - 今宵共举杯.mp3"));
  BufferedOutputStream bufo=new BufferedOutputStream(new FileOutputStream("E:\\汤灿 - 今宵共举杯.mp3"));
  int by=0;
  while((by=bufi.myRead())!=-1){
   bufo.write(by);
  }
  bufi.myClose();
  bufo.close();
}
}
class MyBufferedInputStream{
private InputStream in;
private byte[] buf=new byte[1024];
private int pos=0;   //定义指针
private int count=0; //定义计数器,用于记录读取的个数.

MyBufferedInputStream(InputStream in){
  this.in=in;
}
public int myRead() throws IOException{
  if(count == 0){
   count=in.read(buf);//通过in对象读取硬盘上的数据,并存储在buf中.
   if(count<0){
    return -1;
   }
   pos=0;
   byte b=buf[pos];
   count--;   //数组中的元素
   pos++;     //数组下标
   return b;
  }else if(count>0){
   byte b=buf[pos];
   count--;
   pos++;
   return b;
  }
  return -1;
}
public void myClose() throws IOException{
  in.close();
}
}
原文件是3.07MB,为什么复制后的文件只有4KB???   请大侠们帮帮忙!!!小弟在此谢过!

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
因为你用的是if语句,复制是应该用在循环里,你再好好看看视频。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在myRead()方法里面你用的if,只执行了一次,所以复制的文件比原来的文件小,你应该把if换成循环。
回复 使用道具 举报
我去看了毕老师的视频,问题不在if,而在myread()方法的返回值没有&255,是我搞错了吗?
回复 使用道具 举报
我问了问传智播客的老师,不是if问题,是没有&255,谢谢啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马