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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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 10:35

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
方法是定义的int
而成员又定义了byte

int 4个8位
byte 1个8位

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


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
提升,为了避免出现-1而以外终止,所以读取流会把byte自动提升为int数据高位补0,而输出流会默认只发送最低的8位,即又还原数据。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
最好把你的代码加上注释,这样自己以后再看的时候也不用全部看一遍,减少阅读时间,而且对别人也是一种很清晰的阐述。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马