楼主已经清楚,我在这里就说一下myRead方法原理和具体实现。
myRead函数主要是把数据抓到缓冲区里,并从缓冲区里一次读一个字节
那么原理是定义一个数组,把流里面的数据抓到数据里面,但是数组长度固定,定义的数组可能装不下;
此时就要用循环读取,但是最后一次读的数组可能就不是数组的长度,此时要把数组里面元素的有效位数找到,通过readread(byte[] b)方法。
用一个count变量记住一次读的字节的数量,每读myRead一次时,就把缓冲区里的字节赋值给一个变量,怎么赋值?这根把数组元素的值赋给变量一样,
并且每次赋值时,数组指针会随myRead读取次数向后移1位,故会有pos++,并且把count--(为了后面的count==0),并把变量处理后返回出去;当count为0时候,
此时又会调用一次read(byte[] b) 方法,如此循环,直到count小于(或等于(最后一次))自己定义的数组长度,当读到最后一次字节再往下读的时,此时count为0,
又会执行read(byte[] b) 方法,但此时的count返回-1,就不要在继续读取下去了。
需要注意的是:每读取一次myRead方法,就爱需要读取下一个字节,就需要pos++;
int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 |