黑马程序员技术交流社区
标题:
关于使用字节流缓冲方式实现媒体文件的复制问题
[打印本页]
作者:
michaelchen
时间:
2013-3-20 23:30
标题:
关于使用字节流缓冲方式实现媒体文件的复制问题
本帖最后由 michaelchen 于 2013-3-20 23:34 编辑
/*在C盘底下有个0.mp3的文件,通过字节流缓冲区实现对这个文件的复制*/
import java.io.*;
class MyBufferedInputStreamDemo
{public static void main(String[] args)throws IOException
{long start=System.currentTimeMillis();
copy();
long end=System.currentTimeMillis();
System.out.println("复制使用了:"+(end-start)+"毫秒");
}
public static void copy()throws IOException
{ MyBufferedInputStream fis=new MyBufferedInputStream(new FileInputStream("c:\\0.mp3"));
BufferedOutputStream fos=new BufferedOutputStream(new FileOutputStream("c:\\2.mp3"));
int len=0;
while((len=fis.myRead())!=-1)
{fos.write(len);}
fos.close();
fis.myClose();
}
}
class MyBufferedInputStream
{private InputStream in;
private byte[] buf=new byte[1024];
private int pos=0,count=0;
MyBufferedInputStream(InputStream in)
{this.in=in;}
public int myRead()throws IOException
{if(count==0)
{ count=in.read(buf);
if(count<0)
return -1;
pos=0;
byte b=buf[pos];
count--;
pos++;
return b&255; //为什么要与上255呢?
}
else if(count>0)
{ byte b=buf[pos];
count--;
pos++;
return b&0xff;
}
return -1;
}
public void myClose()throws IOException
{ in.close();
}
}
复制代码
在上述代码的注释中,为什么要跟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