整理下以前自学的笔记,留个念想,不喜轻喷。希望基础不好的同学看完这篇文章,能掌握缓冲流,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆。(
文末有资源领取
)
一、什么是 IO 流?
想象一个场景:
我们在电脑上编辑文件,可以保存到硬盘上,也可以拷贝到 U 盘中。
那这个看似简单的过程,背后其实是数据的传输。
数据的传输,也就是数据的流动。
既然是流动也就会有方向,有入方向和出方向。
举个上传文件的栗子,现在有三个对象,文件、应用程序、上传的目标地址(服务器)。
简化的上传文件有两步:
应用程序读文件(此为入方向,文件读入到应用程序)
应用程序写文件(此为出方向,读完之后写到目标地址)
注意这个入和出是相对的,它相对于应用程序而言。如果相对于服务器而言,这个上传文件操作就是入方向,从应用程序读入。
Java 中 I/O 操作主要是指使用
java.io
包下的内容,进行输入、输出操作。
输入也叫做读取数据,输出也叫做作写出数据。
二、IO 流的分类
我不认同网络上很多 IO 流的图,他们只是简单的把 io 流分成字节流和字符流。
这样的分类也不是说不好,只是太臃肿、难记。
先上一张我自己总结的 IO 留的思维导图,我先把它分成了节点流和处理流,节点流是直接接触数据源的,而处理流是出于各种目的在节点流的基础上再套一层的 IO 流。
再按照操作类型,分成 8 个小类,然后才是字节、字符分类,最后才是输入、输出的分类。
具体可以看以下思维导图 (可能不清晰,有需要的在后台回复 IO 流获取原思维导图)
根据数据的流向分为:
输入流和输出流。
输入流 :
把数据从
其他设备
上读取到
内存
中的流。
输出流 :
把数据从
内存
中写出到
其他设备
上的流。
根据数据的类型分为:
字节流和字符流。
字节流 :
以字节为单位,读写数据的流。
字符流 :
以字符为单位,读写数据的流。
Java IO 流
IO 流要说明白需要好几篇才行,今天复习缓冲流。
三、为什么需要缓冲流?
前面我们已经复习过字节流、字符流。
使用基本的字节输入流读取文件,就相当于将文件中的数据,通过操作系统,在通过 JVM 一个个传入到内存中,这样的话,文件读取的速度比较慢。如果使用字节缓冲流,就可以建立一个缓冲区(相当于一个数组),将缓冲区里面的数据批量传入到文件中,这样的话就提高了文件的读取速度。
一句话概括就是:
缓冲流比较高效,因为它减少了 IO 的次数。
四、使用缓冲流
缓冲流,也叫高效流,是对 4 个基本的字节、字符流的增强,所以也是 4 个流,按照数据类型分类:
字节缓冲流:
Buf