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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈培果 高级黑马   /  2014-5-12 09:27  /  1479 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈培果 于 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. */
复制代码


评分

参与人数 1技术分 +1 收起 理由
天涯追梦 + 1

查看全部评分

5 个回复

倒序浏览
复制的东西不同。
回复 使用道具 举报
skill20 发表于 2014-5-12 10:30
复制的东西不同。

原理上怎么说呢?
回复 使用道具 举报
第一:你的MP3和毕老师的MP3不是同一个文件,第一个字节不一定相同。
第二:程序运行的速度与文件大小和机器的运行速度有关。
回复 使用道具 举报 1 0
蓝雨星空 发表于 2014-5-13 08:09
第一:你的MP3和毕老师的MP3不是同一个文件,第一个字节不一定相同。
第二:程序运行的速度与文件大小和机 ...

哦,哦 这样的啊 谢谢,可算明白了:D
回复 使用道具 举报
MP3不是同一个文件
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马