一.原理
I:input----------------------O:output
IO流:输入输出流。
流的本质就是数据传输。
流的作用就是为数据源和目的地简历一个传输通道。
二. 流的分类
1. 按照流的方向划分
输入流: 将存储媒介(磁盘)中的数据输入到内存中。
输出流: 将内存中的数据输出到存储媒介中。
2.按照流的操作单元划分
2.1、字节流
InputStream、OutputStream
将原始数据解析成二进制数据,读写均为字节数据,
二进制数据不需要编码和解码,比文本IO效率更高。
2.2、字符流
Reader、Writer.将原始数据解析成一种字符,输入输出需要编码解码。
2.3、节点流
从具体介质读写数据的类。
2.4、处理流
对节点流进行包装,进行特殊的处理。
2.5、字节流和字符流的区别?
2.5.1、读写单位不同:
字节流以字节为单位(一个字节为8bit位);字符流以字符为单位。
2.5.2、操作对象不同:
字节流可以处理任何数据,字符流只能处理字符相关的数据。
3. 按照I/O设备划分
3.1、网络IO
通过网络进行数据的发送和接收,
浏览器发送请求给服务器,浏览器接收服务器返回的数据。
3.2、磁盘IO
通过磁盘进行读写操作。
三、同步和异步/阻塞和非阻塞
1.同步和异步:
同步: 被调用方做完事情之后才返回!
异步: 被调用方先返回,然后再做事情,做完之后通知调用方.
区别:被调用方的执行方式和返回时机.
注意:逻辑对象为被调用方
2.阻塞和非阻塞:
阻塞:调用方一直等待被调用方,什么也不做。
非阻塞:调用方没有等待被调用方,去做其他事情去了。
区别:在被调用方返回结果之前的这段时间里,调用方是否一直处于等待状态。
注意:逻辑对象为调用方
四、I/O模式
通过烧水案例来解释三种模式;一排水壶在烧水!
1.BIO:同步阻塞I/O模式
我来烧水,烧开一壶才烧下一壶,
在等待水烧开的这段时间,我处于等待状态,什么都没做。
2.NIO:同步非阻塞I/O模式
我来烧水,烧开一壶才烧下一壶,
我每2分钟去看看水烧开没有,没开的话就去做其他事情。
3.AIO:异步非阻塞I/O模式
我来烧水,几个水壶同时烧,
为水壶装一个开关,去做其他事情,水壶会自动通知我是否烧开。