在字符输入流FileReader和字符输出流FileWriter的底层应用了缓存区技术用于提高读写效率,但是在字节流的基本流中并没有提高。java在为了弥补这一缺陷,在字节缓冲流中应用了这一技术进行优化
字节缓冲流
- 缓冲流中Io中的架构
我们可以看到字符流和字节流都有缓冲流,缓冲流属于高级流,所谓高级流可以理解为封装了基本流并在基本流的基本上添加了一些新的方法的流。但在高级流的底层其实还是基本流在读写数据
字节缓冲流原理
java在字节缓冲输入流BufferInputStream和字节缓冲输出流BufferOutputStream各提供了一个缓冲区(大小为8192个字节的字节数组)
当我们的输入流开始从文件中读数据的时候,会先判断缓冲区中是否有数据,如果没有会将文件中的数据读取到缓冲区,并尽可能读满缓冲区,然后在每次读取的时候从缓冲区中进行读取。用输出流写入数据时会先将数据写入到缓冲区,当1.缓冲区满了,2.资源关闭3.刷新缓冲区的时候再一同写到文件中
这样做的优化就是我们不用频繁的进行文件和内存之间的数据交流了。在上图中我们只需要使用变量b进行内存中的数据交流了,这样效率会快得多