黑马程序员技术交流社区

标题: 关于使用字节流缓冲方式实现媒体文件的复制问题 [打印本页]

作者: michaelchen    时间: 2013-3-20 23:30
标题: 关于使用字节流缓冲方式实现媒体文件的复制问题
本帖最后由 michaelchen 于 2013-3-20 23:34 编辑
  1. /*在C盘底下有个0.mp3的文件,通过字节流缓冲区实现对这个文件的复制*/
  2. import java.io.*;
  3. class MyBufferedInputStreamDemo
  4. {public static void main(String[] args)throws IOException
  5.         {long start=System.currentTimeMillis();
  6.                 copy();
  7.          long end=System.currentTimeMillis();
  8.          System.out.println("复制使用了:"+(end-start)+"毫秒");
  9.         }
  10. public static void copy()throws IOException
  11. { MyBufferedInputStream fis=new MyBufferedInputStream(new FileInputStream("c:\\0.mp3"));
  12.          BufferedOutputStream fos=new BufferedOutputStream(new FileOutputStream("c:\\2.mp3"));
  13.          int len=0;
  14.          while((len=fis.myRead())!=-1)
  15.          {fos.write(len);}
  16.          fos.close();
  17.          fis.myClose();
  18. }
  19. }
  20. class MyBufferedInputStream
  21. {private InputStream in;
  22. private byte[] buf=new byte[1024];
  23. private int pos=0,count=0;
  24. MyBufferedInputStream(InputStream in)
  25. {this.in=in;}
  26. public int myRead()throws IOException
  27. {if(count==0)
  28.                  { count=in.read(buf);
  29.                          if(count<0)
  30.                                  return -1;
  31.                          pos=0;
  32.                          byte b=buf[pos];
  33.                          count--;
  34.                          pos++;
  35.                          return b&255;        //为什么要与上255呢?
  36.                 }
  37.         else if(count>0)
  38.         {          byte b=buf[pos];
  39.                          count--;
  40.                          pos++;
  41.                          return b&0xff;        
  42.         }
  43.         return -1;
  44. }
  45. public void myClose()throws IOException
  46. { in.close();
  47. }
  48. }
复制代码
在上述代码的注释中,为什么要跟255相与呢?小弟实在费解
作者: 爪哇攻城狮    时间: 2013-3-21 00:20
方法是定义的int
而成员又定义了byte

int 4个8位
byte 1个8位

那么&255  是为了消去前面的3个8位,变成1个8位。那么就符合byte类型了 。



作者: VOIDMAIN    时间: 2013-3-21 01:00
提升,为了避免出现-1而以外终止,所以读取流会把byte自动提升为int数据高位补0,而输出流会默认只发送最低的8位,即又还原数据。
作者: 黄玉昆    时间: 2013-3-21 10:34
最好把你的代码加上注释,这样自己以后再看的时候也不用全部看一遍,减少阅读时间,而且对别人也是一种很清晰的阐述。谢谢




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