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:管连接
相关推荐
峥无5 小时前
Linux进程信号:从基础概念到内核底层原理
linux·运维·服务器·信号处理
广州灵眸科技有限公司6 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 开发(编译)方式说明
linux·服务器·单片机·嵌入式硬件·电脑
土星云SaturnCloud6 小时前
土星云AI边缘计算SE110S系列模型部署实战-YOLOv5
服务器·人工智能·yolo·docker·边缘计算
张忠琳6 小时前
【SR-IOV cni】(Part 4) SR-IOV Network Device Plugin 3.11.0 — 超深度架构分析
网络·云原生·kubernetes·cni·sriov
艾iYYY7 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法
cjp5607 小时前
003.LINQ在WEB API中的应用
服务器·linq
汤愈韬7 小时前
IPSec-NAT穿越原理和配置
网络·网络协议·安全·网络安全·security
周小码7 小时前
10分钟搭建私有Git服务器:Soft Serve实战
运维·服务器·git
疯狂打码的少年7 小时前
输入输出控制方式:DMA(直接存储器存取)
网络·笔记
知无不研7 小时前
对套接字的深入理解
linux·服务器·网络·c++·socket·网络套接字