BufferedInputStream实现原理:
使用BufferedInputStream的read()方法读取硬盘上的字节数据时,实际上调用的是FileInputStream的read(byte[] b)方法,把读取的数据先存放到一个字节数组中(byte[]),也就是字节流缓冲区中.再从字节数组(字节流缓冲区)取出字节数据,BufferedInputStream的read()方法读取字节数据时,一次只能从缓冲区读取一个字节,每次读取一个字节数据,指针(pos)会后移一位,字节数组存储数据数量(count)减一,当字节数组为空,即count = 0时,缓冲区的数据已经全部取出,此时指针pos指向字节数组最后一位。然后根据count = 0 判断字节数组数据已取出完,再从硬盘上读取数据存储到字节数组中,此时要将指针pos重置到字节数组的首位,然后依次循环,当硬盘数据全部读取完后,count的值为-1
简单模拟BufferedInputStream的read()方法实现原理:
import java.io.IOException;
import java.io.InputStream;
/**
* 自定义字节缓冲流 简单模拟实现BufferedInputStream中的read()方法
* */
public class MyBufferedInputStream {
//持有一个InputStream对象实例
private InputStream in;
//定义一个字节数组,用于暂时缓存读取的数据
private byte[] buf = new byte[1024*4];
//定义一个指针
int pos = 0;
//定义计数器
int count = 0;
public MyBufferedInputStream(InputStream in){
this.in = in;
}
//定义一个myRead()方法,简单模拟实现BufferedInputStream中的read()方法