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()方法