三.JAVAIO流
1.字节流
抽象类
inputstream
outputstream
FileInputStream
FileOutputStream
2.字符流
InputStreamReader 字节转字符 可加编码
OutputStreamWriter 字符转字节
3.字节缓冲流
将读取写入的字节放入缓存区,减少io次数
BufferedInputStream
BufferedOutputStream
4.io流设计模式
装饰器
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName));
ZipInputStream zis = new ZipInputStream(bis);
适配器
工厂
观察者
5.io模型
io的本质是内核获取外部文件同步到进程或者将进程文件同步到外部
进程向操作系统请求外部数据
操作系统将外部数据加载到内核缓冲区
操作系统将数据从内核缓冲区拷贝到进程缓冲区
进程读取数据继续后面的工作
1.BIO
同步阻塞
发起read后,线程一直阻塞,直到内核完成操作
2.NIO
同步非阻塞
反复调用read,通过轮询操作避免一直阻塞,但是等待内核完成操作的时间线程还是阻塞的
会一直轮询数据是否准备完毕,性能消耗大
IO多路复用
先select/epoll,当数据准备就绪,才发起read
3.AIO
异步io,基于事件和回调机制实现