黑马程序员技术交流社区

标题: 自定义IO缓冲复制Mp3,出错,求解 [打印本页]

作者: 陈培果    时间: 2014-5-12 09:27
标题: 自定义IO缓冲复制Mp3,出错,求解
本帖最后由 陈培果 于 2014-5-13 08:47 编辑
  1. /*
  2. 自定义字节缓冲区,复制Mp3
  3. */
  4. import java.io.*;
  5. class MyBufferedInputStream
  6. {
  7.         private InputStream in;
  8.         private byte[] buf=new byte[1024];
  9.         private int pos=0,count=0;
  10.         MyBufferedInputStream(InputStream in)throws IOException
  11.         {
  12.                 this.in=in;
  13.         }
  14.         //一次读一个字节,从缓冲区(字节数组)获取。
  15.         public int myRead()throws IOException
  16.         {
  17.                 //通过in对象读取硬盘上的数据,并存到buf中
  18.                 if (count==0)
  19.                 {
  20.                         count=in.read(buf);//调用myRead方法,网buf中装数据,返回个数count=1024
  21.                         if (count<0)
  22.                                 return -1;
  23.                         pos=0;
  24.                         byte b=buf[pos];//取数组中第一个元素
  25.                         count--;
  26.                         pos++;
  27.                         return b;//返回一个字节
  28.                 }
  29.                 else if(count>0)
  30.                 {
  31.                         byte b=buf[pos];//取数组中第一个元素
  32.                         count--;
  33.                         pos++;
  34.                         return b;//返回一个字节
  35.                 }
  36.                 return -1;
  37.                
  38.         }
  39.         public void myClose()throws IOException
  40.         {
  41.                 in.close();
  42.         }
  43. }
  44. class  MyBufferedInputStreamDemo
  45. {
  46.         public static void main(String[] args) throws IOException
  47.         {
  48.                 long start=System.currentTimeMillis();
  49.                 copy_1();
  50.                 long end=System.currentTimeMillis();
  51.                 System.out.println((end-start)+"毫秒");
  52.         }
  53.         public static void copy_1() throws IOException
  54.         {
  55.                 MyBufferedInputStream bufis=new MyBufferedInputStream(new FileInputStream("c:\\0.mp3"));
  56.                 BufferedOutputStream bufos=new BufferedOutputStream(new FileOutputStream("c:\\2.mp3"));
  57.                 int by=0;
  58.                 System.out.println("第一个字节:"+bufis.myRead());
  59.                 while ((by=bufis.myRead())!=-1)
  60.                 {
  61.                         bufos.write(by);
  62.                 }
  63.                 bufos.close();
  64.                 bufis.myClose();
  65.         }
  66. }
  67. /*
  68. 运行程序第二次,复制Mp3第二次时,
  69. 我按照毕老师的程序写的,毕老师的运行结果是:
  70. 第一个字节:-1
  71. 0毫秒
  72. 为什么我的是:
  73. 第一个字节:73
  74. 3毫秒

  75. 求师兄们解答一下

  76. */
复制代码



作者: skill20    时间: 2014-5-12 10:30
复制的东西不同。
作者: 陈培果    时间: 2014-5-12 18:52
skill20 发表于 2014-5-12 10:30
复制的东西不同。

原理上怎么说呢?
作者: 蓝雨星空    时间: 2014-5-13 08:09
第一:你的MP3和毕老师的MP3不是同一个文件,第一个字节不一定相同。
第二:程序运行的速度与文件大小和机器的运行速度有关。
作者: 陈培果    时间: 2014-5-13 08:46
蓝雨星空 发表于 2014-5-13 08:09
第一:你的MP3和毕老师的MP3不是同一个文件,第一个字节不一定相同。
第二:程序运行的速度与文件大小和机 ...

哦,哦 这样的啊 谢谢,可算明白了:D
作者: 一万    时间: 2015-1-8 20:47
MP3不是同一个文件




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