IO流-字节缓冲流--java进阶day13

1.字节缓冲流

字节缓冲流内部自带数组,用于提高读写效率

字节缓冲流本身不具备读写功能,还是需要依赖普通的字节流,字节缓冲流可以将普通字节流进行包装使用

2.字节缓冲流的使用

字节缓冲流和普通的字节流使用一模一样,通过构造方法创建字节缓冲流

字节缓冲流的构造方法要字节流接口,我们传入对应接口的子类

注意:在关流时,我们只需要关闭字节缓冲流即可,无须再关闭里面的字节流。

----字节流好比普通人,字节缓冲流则是化了妆的普通人,化了妆的普通人挂了,不就是普通人挂了吗

2.字节缓冲流原理

[1]缓冲输入流原理

首先,由普通流对象进行文件关联,再由字节缓冲流进行包装

字节缓冲流包装的方式就是在源码中创建一个8192大小的数组,当我们进行读取操作时,会一次性对文件读取8192个字节存满该数组

表面我们调用read是一次读一个字节,实际上是字节缓冲流一次性从文件中读8192个字节存到数组中,然后再拿出一个字节给我们

当数组中8192个字节都被我们使用完后,字节缓冲流就又会再获取8192个字节到数组中,如果没有8192个那就有多少获取多少

[2]缓冲输出流原理

普通流对象和文件进行关联,再由缓冲输出流对象进行包装

我们写出的字节会被存在数组中,当数组满了8192个字节后,就会一次性写出到文件中

3.字节缓冲流+自定义数组

普通流再进行读取操作时,可以通过自定义数组来提升读写速度,字节缓冲流也可以

输入流先和文件关联,然后缓冲输入流包装,一次性从文件中读取到8192个字节存到缓冲输入流的内置数组

接着走read方法,根据我们定义的数组大小取出对应个数的字节,而这些字节就是从内置数组中获取

取出的这8192个字节往何处走呢?--取出的8192个字节再存入到缓冲输出流的内置数组中

然后缓冲输出流的内置数组再一次性把8192个字节输出到文件上

我们自定义的数组起到的作用:作为中介,存入左侧内置数组取出的8192个字节,再把8192个字节传给右侧内置数组,大幅加快读写速度。

如果没有我们自定义的数组,按照刚开始写的代码,一个一个读,一个一个写,中间内存中,左侧数组传数据给右侧数组的速度就会慢很多

如果是单个读取,想在控制台看到读取的字节,直接输出接收变量

如果是多个读取,想在控制台看到读取的字节,输出我们自定义的中介数组

4.总结

我们使用普通类+自定义数组的速度也很快,只比缓冲流+自定义数组慢一点,而且用起来也更方便,所以缓冲流了解即可,平时还是使用普通类+数组即可

posted @ 2025-04-20 10:44  直実  阅读(11)  评论(0)    收藏  举报