接着,我们继续来学习 java 中的字节流操作。
装饰者缓冲流 bufferedinput/outputstream
装饰者流其实是基于一种设计模式「装饰者模式」而实现的一种文件 io 流,而我们的缓冲流只是其中的一种,我们一起来看看。
在这之前,我们使用的文件读写流 fileinputstream 和 fileoutputstream 都是一个字节一个字节的从磁盘读取或写入,非常耗时。
而我们的缓冲流可以预先从磁盘一次性读出指定容量的字节数到内存中,之后的读取操作将直接从内存中读取,提高效率。下面我们一起看看缓冲流的具体实现情况:
依然先以 bufferedinputstream 为例,我们简单提一下它的几个核心属性:
private static int default_buffer_size = 8192;
protected volatile byte buf[];
private static int max_buffer_size = integer.max_value - 8;
protected int count;
protected int pos;
protected int markpos = -1;
protected int marklimit;
buf 就是用于缓冲读的字节数组,它的值将随着流的读取而不停的被填充,继而后续的读操作可以直接基于这个缓冲数组。
default_buffer_size 规定了默认缓冲区的大小,即 buf 的数组长度。max_buffer_size 指明了缓冲区的上限。
count 指向缓冲数组中最后一个有效字节索引后一位。pos 指向下一个待读取的字节索引位置。