BufferedInputStream
BufferedInputStream 是一个包装类,通过持有inputstream的引用,并在原有read方法基础上添加buffer数组缓存,实现了缓冲的目的。
构造函数,需要传入实际的inputstream,默认缓冲数组大小8192,8kb
public BufferedInputStream(InputStream in) {
this(in, DEFAULT_BUFFER_SIZE);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
当前缓冲区中数据长度
protected int count;
下一次读取位置的下标
protected int pos;
调用mark方法后,记录当前pos的位置
protected int markpos = -1;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
read方法,一次读取一个字节,内部有缓冲
public synchronized int read() throws IOException {
//如果下一次读取的位置,超出了缓冲区中的数据
if (pos >= count) {
//读取数据到buffer数组
fill();
if (pos >= count)
return -1;
}
return getBufIfOpen()[pos++] &