I/O
1:常见的 I/O 模型
- unix 系统中
- 同步阻塞
- 同步非阻塞
- I.O 多路复用
- 信号驱动
- 异步 I/O
- 轮询
- 终端
- DMA
- 通道?
- BIO
- 同步阻塞
- 应用程序发起请求之后,就一直都等待数据的返回,一直阻塞
- NIO
- Non- blocking I/O
- 面向缓冲的,基于通道的I/O
- 多路复用
- 线程首先发起select 调用,询问数据是否准备就绪
- 等内核数据准备好了,线程再发起read调用
- 多路复用器
- 只需要一个线程便可以管理多个连接
- 当数据到了之后,才会为其进行服务
- AIO
- 异步IO模型
- 基于时间和回调机制来实现的
- 应用操作之后会直接返回,不会堵塞
- 当后台处理完成之后,操作系统会通知相应的线程进行后续的操作
2:I/O 分为哪几种
- 按照流的流向,可以分为输入流和输出刘
- 按照操作的单元,分为字节流和字符流
- 按照流的角色,分为节点流和处理流
3:为什么有了字节流还有字符流
- 字符流是由Java虚拟机将字节码转化得到的,这个转换是比较耗时的,并且可能还会在编码类型上出问题
- 直接提供一个操作字符的接口,方便我们平时对字符进行流操作。
- 如果我们是音频,视频,字节流是比较好的
- 如果是字符的话,用字符流比较好
- 面向字节流的inputstream 和 outpurstream
- 面向字符的reader 和 writer