NIO 概述
NIO(New IO / Non-blocking IO)是 JDK 1.4 引入的 IO 模型。
如果你还在用 BIO 的思维方式处理高并发场景,迟早会遇到瓶颈。NIO 提供了另一种选择。
核心组件
Buffer — 数据的中转站
Buffer 是一块可读写的内存区域,数据先读写到 Buffer,再从 Buffer 读写到 Channel。
详见:Buffer 缓冲区
Channel — 双向通道
Channel 是数据源和目的地的连接。和 BIO 的流不同,Channel 可读可写。
详见:Channel 通道
Selector — 多路复用器
Selector 实现了多路复用——用一个线程管理多个 Channel,当某个 Channel 有数据就绪时才处理。
详见:Selector 选择器
通信与对比
非阻塞通信
综合运用 Channel、Buffer、Selector,实现高性能的非阻塞 Echo 服务器。
详见:NIO 非阻塞通信
选型对比
BIO 和 NIO 是两种完全不同的 IO 模型,各有适用场景。
实战案例
聊天服务器、文件传输……踩过的坑都是经验。
详见:NIO 实战
NIO.2 (JDK 7+)
JDK 7 对 NIO 进行了增强,引入了更简洁的 Path API、强大的 Files 工具类和 WatchService 文件监听。
详见:NIO.2 概述
NIO 的学习曲线比 BIO 陡峭,但理解了核心概念后,你会发现它解决的是真实问题。
下一节,我们从 Buffer 开始,深入 NIO 的世界。
