Java IO NIO AIO
一、背景
JDK 1.4中的java.nio.*包
中引入新的Java I/O库,其目的是提高速度。实际上,“旧”的I/O包已经使用NIO重新实现过,即使我们不显式的使用NIO编程,也能从中受益。官网nio应对的是New I/O,当然大家也把它翻译成 no-blocking io。
二、I/O与NI/O对比
引用网络图片:
三、核心组成
NIO主要有三个核心部分组成:
- buffer缓冲区
- Channel管道
- Selector选择器
四、相关问题及笔记
1、NIO是否是绝对的非阻塞
NIO一个重要的特点是:socket主要的读、写、注册和接收函数,在等待就绪阶段都是非阻塞的,真正的I/O操作是同步阻塞的(消耗CPU但性能非常高)。
引用以下网络内容:
2、几个概念
- IO(BIO)也就是传统的流式IO或叫同步阻塞IO
- NIO new io或叫同步非阻塞IO
- AIO 异步非阻塞IO
3、NIO非常优秀为什么没怎么看到被应用
- NIO的类库和API还是有点复杂,比如Buffer的使用
- Selector编写复杂,如果对某个事件注册后,业务代码过于耦合
- 需要了解很多多线程的知识,熟悉网络编程
- 面对断连重连、保丢失、粘包等,处理复杂
- NIO存在BUG,根据网上言论说是selector空轮训导致CPU飙升,具体有兴趣的可以看看JDK的官网
引用网络资源: 漫谈Java IO之 Netty与NIO服务器
这篇文章说的比较清楚
4、NIO的一些应用(一般应用于网络编程)
一些nio网络编程框架 mina netty