当前位置: 首页 > news >正文

郑州网站制作工具龙岩网站建设馨烨

郑州网站制作工具,龙岩网站建设馨烨,品牌宣传的推广,学校教育培训机构1. 什么是 NIO?NIO New Input/Output,是 Java 在 JDK 1.4 引入的一套新的 I/O API。和传统的 BIO(Blocking I/O,阻塞IO) 相比,NIO 有三个核心特点:非阻塞 I/O传统 BIO:一个线程读写…

1. 什么是 NIO?

NIO = New Input/Output,是 Java 在 JDK 1.4 引入的一套新的 I/O API。

和传统的 BIO(Blocking I/O,阻塞IO) 相比,NIO 有三个核心特点:

  1. 非阻塞 I/O

    • 传统 BIO:一个线程读写一个连接,容易造成线程浪费。

    • NIO:一个线程可以管理多个通道(Channel),适合高并发场景。

  2. 基于缓冲区 Buffer

    • BIO:数据直接读到流里。

    • NIO:数据先读到 Buffer,再由程序处理。

  3. 基于 Channel + Selector

    • Channel:类似“通道”,可以同时读写。

    • Selector:选择器,可以监控多个通道(连接)的事件(如读、写、连接等)。


2. NIO 的核心组件

  • Channel(通道):比如 FileChannelSocketChannel

  • Buffer(缓冲区):存储数据,比如 ByteBuffer

  • Selector(选择器):实现多路复用,一个线程监听多个通道。


3. Demo 示例(NIO 服务端与客户端)

📌 服务端:NIO 实现一个简单 Echo Server

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.util.Iterator;public class NioServer {public static void main(String[] args) throws IOException {// 1. 打开服务器通道ServerSocketChannel serverChannel = ServerSocketChannel.open();serverChannel.bind(new InetSocketAddress(8080));serverChannel.configureBlocking(false); // 非阻塞// 2. 打开 SelectorSelector selector = Selector.open();serverChannel.register(selector, SelectionKey.OP_ACCEPT);System.out.println("NIO Server started on port 8080...");while (true) {selector.select(); // 阻塞直到有事件发生Iterator<SelectionKey> it = selector.selectedKeys().iterator();while (it.hasNext()) {SelectionKey key = it.next();it.remove();if (key.isAcceptable()) {SocketChannel client = serverChannel.accept();client.configureBlocking(false);client.register(selector, SelectionKey.OP_READ);System.out.println("Client connected: " + client.getRemoteAddress());} else if (key.isReadable()) {SocketChannel client = (SocketChannel) key.channel();ByteBuffer buffer = ByteBuffer.allocate(256);int read = client.read(buffer);if (read == -1) {client.close();} else {buffer.flip();client.write(buffer); // 回显数据buffer.clear();}}}}}
}

📌 客户端:NIO 简单连接并发送消息

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;public class NioClient {public static void main(String[] args) throws Exception {SocketChannel client = SocketChannel.open(new InetSocketAddress("localhost", 8080));String message = "Hello NIO!";ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());client.write(buffer);buffer.clear();client.read(buffer);buffer.flip();System.out.println("Server echoed: " + new String(buffer.array(), 0, buffer.limit()));client.close();}
}

4. 运行效果

  1. 启动服务端 → NIO Server started on port 8080...

  2. 启动客户端 → 控制台输出:

    Server echoed: Hello NIO!
    
  3. 服务端控制台会显示客户端连接,并回显消息。


总结一句话
NIO 就是 Java 的新 I/O 模型,基于 Channel + Buffer + Selector,支持 多路复用 + 非阻塞通信,特别适合高并发的网络程序,比如 Netty 框架就是基于 NIO。

http://www.dtcms.com/a/568560.html

相关文章:

  • 沈阳网站建设的公司软件网站下载免费
  • iOS SwiftUI 动画开发指南
  • LeetCode算法学习之验证回文串
  • 深入掌握 OpenCV-Python:从图像处理到智能视觉
  • 运输层协议概述及UDP
  • 【多所高校合作】第四届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2025)
  • 什么网站做h5做得好登录不上wordpress
  • 个人制作的网站模板自助建站自己要做网站的来看下
  • 第十五周Fscan和利用漏洞上线远程和数据库提权上线远控
  • 第5章 所有权系统
  • 从零开始学Flink:事件驱动
  • 机器学习实现逻辑回归-癌症分类预测
  • Kafka 从入门到精通完整指南
  • 常见二三维GIS数据分类及处理流程图
  • LLM结构化输出:约束解码、CFG和response_format
  • 做网站麻烦不文山网站建设求职简历
  • wordpress网站静态页面外国食品优秀设计网站
  • hybrid
  • C++中malloc、free和new、delete的区别
  • 计算机视觉:python车辆行人检测与跟踪系统 YOLO模型 SORT算法 PyQt5界面 目标检测+目标跟踪 深度学习 计算机✅
  • 提高肠氧饱和度测量精度的新技术评估
  • 【数据集+源码+文章】基于yolov8+streamlit的12种水果品质、成熟度检测系统
  • Camera参数(3A)
  • 【C++:搜索二叉树】二叉搜索树从理论到实战完全解读:原理、两种场景下的实现
  • 高性能网络编程实战:用Tokio构建自定义协议服务器
  • H265 vs AV1 vs H266帧内块拷贝差异
  • CSS 中 `data-status` 的使用详解
  • 舟山企业网站建设公司微信小程序麻将辅助免费
  • VMware替代 | 详解ZStack ZSphere产品化运维六大特性
  • 缓存击穿,缓存穿透,缓存雪崩的原因和解决方案(或者说使用缓存的过程中有没有遇到什么问题,怎么解决的)