javaNIO详解

Java NIO 核心原理与应用详解

Java NIO(Non-blocking I/O)详解

Java NIO(New I/O)是 Java 1.4 引入的高性能 I/O 框架,相比传统的 BIO(Blocking I/O),它提供了非阻塞、多路复用、零拷贝等能力,适用于高并发网络通信和文件操作。下面详细解析其核心概念和实现原理。


1. Java NIO 的核心组件

Java NIO 的核心由 Channel(通道)、Buffer(缓冲区)、Selector(选择器) 组成:

组件 作用
Channel 双向数据传输管道(类似流,但支持读写)
Buffer 数据缓冲区(存储待发送或接收的数据)
Selector 多路复用器,监听多个 Channel 的 I/O 事件(如读、写、连接)

2. NIO 的工作流程

(1) 传统 BIO(阻塞 I/O)的问题

每个连接占用一个线程,线程切换开销大。
线程阻塞:当没有数据可读时,线程会一直等待,浪费 CPU 资源。

(2) NIO 的非阻塞模型

NIO 采用 事件驱动(Event-Driven) 的方式:

  1. Channel 注册到 Selector,并指定监听的事件(如 OP_READOP_WRITE)。
  2. Selector 轮询 所有注册的 Channel,返回就绪的事件。
  3. 线程处理就绪事件(如读取数据、写入数据),避免阻塞。

关键优化
单线程可管理多个连接(减少线程数)。
非阻塞:没有数据时,线程可以处理其他任务。


3. NIO 的核心实现

(1) Channel(通道)

SocketChannel:用于 TCP 网络通信(客户端/服务端)。
ServerSocketChannel:服务端监听新连接。
FileChannel:文件操作(支持 mmapsendfile)。

示例:创建 SocketChannel

SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(false); // 设置为非阻塞模式
socketChannel.connect(new InetSocketAddress("example.com", 80));

(2) Buffer(缓冲区)

ByteBuffer:最常用的缓冲区(支持堆内存和直接内存)。
CharBufferIntBuffer:其他数据类型的缓冲区。

Buffer 的读写流程

ByteBuffer buffer = ByteBuffer.allocate(1024); // 分配堆内存
// 写入数据
buffer.put("Hello".getBytes());
buffer
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值