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:管连接
相关推荐
Hello World . .6 小时前
Linux驱动编程1:imxull上移植Linux系统
linux·运维·服务器
添砖java‘’6 小时前
网络层IP
网络·网络协议·tcp/ip·ip
IMPYLH6 小时前
Linux 的 numfmt 命令
linux·运维·服务器·bash
sunz_dragon6 小时前
Claude Code / Codex Git 版本管理完整使用指南
服务器·人工智能
SPC的存折6 小时前
3、主从复制实现同步数据过滤
linux·运维·服务器
SPC的存折6 小时前
openEuler 24.03 MariaDB Galera 集群部署指南(cz)
linux·运维·服务器·数据库·mysql
芯智工坊6 小时前
第19章 Mosquitto完整项目实战
网络·人工智能·mqtt·开源
SPC的存折7 小时前
MySQL 8.0 分库分表
linux·运维·服务器·数据库·mysql
风吹迎面入袖凉7 小时前
【Redis】Redisson分布式锁原理
java·服务器·开发语言