import java.io.*;
class MyBufferedInputStream
{
private InputStream in;
private byte[] buf=new byte[1024*4];
private int pos=0,count=0;
MyBufferedInputStream(InputStream in)
{
this.in=in;
}
//一次度一个字节,从缓冲区(字节数组)获取
public int myRead()throws IOException
{
//通过in对象读取硬盘上的数据,并保存在buf中。
if(count==0)
{
count=in.read(buf);//count为0往里面装数据
if(count<0)
return -1;
byte b=buf[pos];//取出pos对应的数据
count--;
pos++;
return b&255;//这里!!!!!!问题!!!!!
}
else if(count>0)
{
byte b=buf[pos];//取出pos对应的数据
count--;
pos++;
return b&0xff;//这里!!!!!!问题!!!!!
}
return -1;
}
public void myClose()throws IOException
{
in.close();
}
}
//很郁闷啊,这次是字节流的问题,我这个代码是按照毕老师视频写的。在没有 b&0xff;和255与上之前拷贝MP3会拷贝失败,毕老师解释是因为遇上连续8个1的情况,然后返回一个-1,导致循环停止,现在就把返回的结果与上255将原来的一个字节上升为前面带有0的4个字节。但是我与上之后编译通过运行报错
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10240
at MyBufferedInputStream.myRead(MyBufferedInputStream.java:25)
at copyMP3.copy_2(copyMP3.java:45)
at copyMP3.main(copyMP3.java:17)
我另外一个代码 copyMP3应该是没问题的。没提升之前都能用,提升了就成这样了?求分析!。。。卡住好久了!!
|
|