IO 专题内容多且互相咬合:流 API、操作系统 IO 模型、NIO 三件套、Netty 框架,单看任何一块都容易迷失。这篇学习地图先按主题分组,再理清依赖关系,最后给出推荐顺序,帮你把零散的知识点串成一条线。

主题分组

流基础(java.io)

这是整个专题的地基,目标是熟练使用面向流的 API 完成日常读写:

  • 字节流与字符流:解决”数据以什么粒度进出程序”的问题——字节流通吃一切,字符流专门处理文本编码。
  • 缓冲流:解决”如何减少系统调用次数”的问题,是性能优化第一课。
  • IO 设计模式:解决”几十个类为什么这样组织”的问题,装饰器与适配器是读懂类库的两把钥匙。
  • 文件操作与序列化:解决”对象与文件如何互相转换”的问题。

NIO(java.nio)

针对流模型在高并发网络场景下的痛点而设计:

  • Buffer / Channel / Selector 三件套:解决”如何用少量线程管理大量连接”的问题,是 NIO 编程的核心。
  • NIO.2 的 Path 与 Files:解决”老 File API 难用”的问题,文件操作从此有了像样的工具类。

模型与框架

把视角从 Java API 抬升到操作系统与框架层:

  • BIO / NIO / AIO 与 IO 多路复用:解决”阻塞/非阻塞、同步/异步到底在说什么”的问题,select、poll、epoll 的区别也在这一层。
  • Reactor 与 Netty:解决”理论如何落地成高性能网络框架”的问题,看 EventLoop 如何封装底层多路复用。

依赖关系

几组关键的依赖链:

  • 设计模式依附于流类库,不懂流就谈不上理解包装链,所以流基础在前。
  • NIO 是对流模型痛点的回应,先体会 BIO 一对一模型的瓶颈,才能明白 Selector 的意义。
  • Selector 本质是 epoll/kqueue 的 Java 封装,所以 IO 多路复用的概念要先于 NIO 源码细节。
  • Netty 站在 NIO 与 Reactor 之上,放在最后看才不费力。

推荐学习顺序

  1. 过一遍流体系,能熟练使用 try-with-resources 读写文件与文本。
  2. 看 IO 设计模式,理解装饰器的包装链与适配器的编解码角色。
  3. 学 IO 模型,建立操作系统视角,分清阻塞、非阻塞与多路复用。
  4. 啃 NIO 三件套,动手写一个基于 Selector 的非阻塞 Echo Server。
  5. 对照 Netty 源码收尾,把前面所有概念在框架里对号入座。

一句话速查表

主题 解决什么问题
字节流 / 字符流 数据以什么粒度进出程序
缓冲流 如何减少系统调用次数
IO 设计模式 类库为何这样组织
IO 模型 线程与内核如何协作等待数据
IO 多路复用 一个线程如何盯住上万个连接
Buffer / Channel / Selector NIO 的数据容器、传输通道与事件分发器
Reactor / Netty 把多路复用工程化成可用框架

自检

学完全部内容后,试着回答三个问题:缓冲流为什么快?select、poll、epoll 差在哪?能否徒手写出 Selector 的注册—轮询循环?三个都能讲清楚,这张地图就算走完了。