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(最常用,网络通信)
  • IntBuffer、LongBuffer、CharBuffer 等
核心方法
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:管连接
相关推荐
_upupup23 分钟前
Linux的调试工具——gdb/cgdb
linux·服务器
木子n11 小时前
车载以太网与SOME/IP服务化通信实战-01.从字节到服务:SOME/IP报文解析与四通道开销账
网络·网络协议·tcp/ip·车载以太网·some/ip
Escalating_xu2 小时前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
爱跳舞的烤冷面3 小时前
Linux篇——网络编程
网络
Knight_AL4 小时前
基于 Netty 实现的 WebSocket 服务端
网络·websocket·网络协议
Android系统攻城狮4 小时前
Linux Gstreamer深度解析之gst_audio_sink_get_type调用流程与实战(六十五)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
wuyk5555 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 31 章 休眠唤醒 WiFi 断连、时间同步、网络恢复机制
网络·物联网·php
沫璃染墨6 小时前
从零入门计算机网络系列(一):计算机网络初识——从网络发展史到TCP/IP协议》
linux·网络·网络协议·tcp/ip·计算机网络
zyseo86 小时前
谷歌SEO 站内搜索优化实战:把站内搜索词变成关键词金矿
java·服务器·数据库
王大傻09286 小时前
堆叠注入(Stacked Queries Injection)详解:原理、利用与防御
服务器·网络·数据库·web安全·网络安全