NIO 三大核心组件

NIO 三大核心组件

Java NIO(New IO / Non-blocking IO)是非阻塞、面向缓冲区 的 IO 模型,核心就是 3 个组件
Channel(通道) + Buffer(缓冲区) + Selector(选择器)


一、三大核心组件总览

组件 作用 一句话理解
Buffer(缓冲区) 数据读写的载体 数据的"集装箱",所有读写都必须经过它
Channel(通道) 数据传输的通道 数据的"高速公路",连接文件/网络
Selector(选择器) 监听多路通道 一个线程管理成千上万个连接的"总管"

二、逐组件详解

1. Buffer(缓冲区)

核心:NIO 所有数据都通过 Buffer 读写

  • 本质:一块可读写的内存数组
  • 方向:Channel ↔ Buffer(双向传输
  • 对比 BIO:BIO 直接操作流,NIO 必须先放 Buffer
重要属性
  • capacity:容量(固定)
  • position:当前读写位置
  • limit:读写上限
常用类型
  • ByteBuffer(最常用,网络通信)
  • IntBufferLongBufferCharBuffer
核心方法
java 复制代码
buffer.put()     // 写入数据
buffer.flip()    // 切换为读模式(关键!)
buffer.get()     // 读取数据
buffer.clear()   // 清空,准备下次写入

2. Channel(通道)

核心:数据传输的通道,双向、非阻塞、可异步

  • 像"流",但比流强大
    • 可以读也可以写(流单向)
    • 可以异步读写
    • 必须配合 Buffer 使用
常用 Channel
  • SocketChannel:TCP 客户端
  • ServerSocketChannel:TCP 服务端
  • FileChannel:文件 IO
工作模式
复制代码
客户端 → Channel → Buffer → 服务端
服务端 → Buffer → Channel → 客户端

3. Selector(选择器)【NIO 灵魂】

核心:一个线程管理多个 Channel,实现 IO 多路复用

  • 作用:监听多个通道的事件(连接、接收、读、写)
  • 优势:
    • 单线程 → 管理上万连接
    • 资源消耗极低
    • 高并发网络编程必备
监听 4 种事件
  1. OP_ACCEPT:有新连接
  2. OP_CONNECT:连接成功
  3. OP_READ:有数据可读
  4. OP_WRITE:可写数据
工作流程
  1. 把多个 Channel 注册到 Selector
  2. Selector 阻塞等待事件
  3. 有事件触发 → 处理对应 Channel
  4. 循环执行

三、三者关系图(极简版)

复制代码
一个 Selector
   ↓ 管理
多个 Channel(连接)
   ↓ 传输
Buffer(数据载体)

一句话总结三者关系:

Selector 管理多个 Channel,每个 Channel 读写数据都必须通过 Buffer。


四、NIO 核心优势

  1. 非阻塞:连接不读写时,线程不会阻塞
  2. IO 多路复用:单线程管理海量连接
  3. 面向缓冲区:数据读写更高效
  4. 高并发、低资源:适合高性能服务器

总结

  • Buffer:装数据
  • Channel:传数据
  • Selector:管连接
相关推荐
小bo波7 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
zzzzzz3107 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
大树8811 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
小宇宙Zz11 天前
Maven依赖冲突
java·服务器·maven
swordbob11 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
网络研究院11 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智11 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest11 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_11 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈11 天前
Unix 与 Linux 异同小叙
linux·服务器·unix