黑马程序员技术交流社区
标题:
自定义自解缓冲流
[打印本页]
作者:
黑马张旭
时间:
2013-1-30 16:23
标题:
自定义自解缓冲流
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);
if(count<0)
return -1;
pos = 0;
*/ 不是太理解这个为什么这个时候 这个数组装了 pos个
byte b = buf[pos];
// count 为什么要 自减下
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();
}
}
/*
复制代码
作者:
王立浩
时间:
2013-1-30 17:28
额 pos是指针 不是你想的pos个,pos初始化为0,read方法
read(byte[] buf)
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 buf中。
返回的count值是这一次读的字节的数量,你取出一个字节,count就减一,直到把这次的读取的所有字节全部返回
还不懂的话,看看老师画的那个缓冲区的图就会明白了
作者:
王溢君
时间:
2013-1-30 17:33
数组一次装了count个,不是pos个!!!!pos是数组的角标,一次次的把数组从前到后读出来,
读一次,总数Count就记数减一个,方便减到0时再读入!
pos自加,遍历数组一般!!!
作者:
黑马张旭
时间:
2013-1-30 17:39
嗯 理解了 谢谢
作者:
黄成超
时间:
2013-1-30 17:40
count==0,之后,也就是重新开始读取数据,读取之后,因为存储在数组中缓冲区中,要从数组缓冲区,自然是从0下标开始取啦!所以就从这里就用用pos作为下标跟踪,buf[pos]s是第pos个,不是共有pos个哦!取出的时候也方便直接获取数组的长度,从而避免输出为空的情况。Count--是计数器的作用,每从缓冲区取出一个元素,就减1,这样子才能知道是否已经读取完了呀!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2