BufferedInputStream流内部有一个缓冲区,先把硬盘上的数据读到缓冲区,然后再用read方法从缓冲区一个一个
读出来,其内部还有一个指针和一个计数器,如果缓冲区的大小为1024,第一次从硬盘读1024个数据,然后read方
法在读的时候,每读一个字节,计数器减一,指针加一,直到缓冲区变零为止,然后再从硬盘上抓另一批数据,这
样提高了效率。
代码体现:
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);
if(count<0)
return -1;
pos = 0;
byte b = buf[pos];
count--;
pos++;
return b&255;
}
else if(count>0)
{
byte b = buf[pos];
count--;
pos++;
return b&0xff;
}
return -1;
}
public void myClose()throws IOException
{
in.close();
}
}