本帖最后由 付江涛 于 2014-7-17 20:47 编辑
MyBufferedInputStream代码:
import java.io.*;
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
{
//通过in对象读取硬盘上的数据,并存储buf中。
if(count==0)
{
count=in.read(buf); //通过count记录数组长度; ? read:读取一定数量的字节记入buf数组,但下面只是通过判断读取了0角标元素。
if(count<0)
return -1;
pos=0;
byte b=buf[pos]; //读取0角标元素 1、
count--; //因为读取了一个角标元素,所以数组长度--
pos++; //指针++
return b&255;
}
else if(count>0)
{
byte b=buf[pos]; //读取0角标元素
count--; //因为读取了一个角标元素,所以数组长度--
pos++; //指针++
return b&0xff;
}
return -1;
}
public void myClose() throws IOException
{
in.close();
}
}
调用MyBufferedInputStream:
public static void copy_2() throws IOException
{
MyBufferedInputStream bufis=new MyBufferedInputStream(new FileInputStream("c:\\0.mp3"));
BufferedOutputStream bufos=new BufferedOutputStream(new FileOutputStream("c:\\2.mp3"));
int by=0;
while ((by=bufis.myRead())!=-1) 2
{
bufos.write(by);
}
bufos.close();
bufis.myClose();
}
问题:
为什么我是这样理解的:count=in.read(buf);,通过read方法,读取一定数量的字节存入buf数组,1 中只是读取了角标0的元素。而调用myRead时,循环一次,in.read()循环一次,每次都是获取的角标0的元素。
|