Java基础 字节缓冲流的读写原理

发布时间 2023-10-24 19:44:38作者: 嘎嘎鸭2

缓冲流真正从文件当中读写数据的还是 InputStream 和 OutputStream 这两个基本流。

FileInputStream 会从文件中读取数据,放到缓冲输入流的缓冲区当中。因为缓冲区的默认大小为 8192,所以会一次性读取 8192 个字节。

FileOutputStream 会把缓冲区中的数据写到本地文件当中。字节缓冲输出流的缓冲区默认大小也是 8192,所以会一次性把缓冲区当中 8192 个字节写到文件目的地。

缓冲输入流里面有一个缓冲区,缓冲输出流里面也有一个缓冲区,这两个缓冲区不是同一个。

 

int b;

while( (b = bis.read()) != -1){

      bos.write(b);

}

bis.read() 方法是从缓冲输入流的缓冲区当中读取的,读取到了一个字节,放到变量 b 当中。bos.write(b) 再把读取到的字节写到缓冲输出流的缓冲区当中。当缓冲输出流的缓冲区当中写满了,就会利用 基本流 自动地写到目的地。如果变量 b 在缓冲输入流的缓冲区当中读不到数据了,这时候又要到文件中读取 8192 个字节放到缓冲输入流的缓冲区当中,再利用 b 传输......一直读到文件的末尾为止。

如果是一次读写一个字节数组的这种方式,原理一样,把变量 b 换成字节数组 bytes 就行了