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

java IO/NIO/AIO

(✪▽✪)曼波~~~~!让曼波用最可爱的赛马娘方式给你讲解吧!(⁄ ⁄•⁄ω⁄•⁄ ⁄)

🎠曼波思维导图大冲刺(先看框架再看细节哦):

📚

解释 Java 中 IO、NIO、AIO 的区别和适用场景:

曼波觉得Java的三种IO家族是这样的哦(๑˃̵ᴗ˂̵)و

// 传统IO示例(阻塞式)
FileInputStream fis = new FileInputStream("test.txt");  // 会阻塞线程直到读取完成
int data = fis.read();// NIO示例(非阻塞)
SocketChannel channel = SocketChannel.open();
channel.configureBlocking(false);  // 设置为非阻塞模式
ByteBuffer buffer = ByteBuffer.allocate(1024);
channel.read(buffer);  // 立即返回,可能读到0字节// AIO示例(异步)
AsynchronousFileChannel afc = AsynchronousFileChannel.open(Paths.get("test.txt"));
afc.read(buffer, 0, null, new CompletionHandler<>() {  // 回调函数public void completed(Integer result, Object attachment) {// 读取完成自动调用}
});

(✪▽✪)曼波~~ 区别总结表:

IONIOAIO
模型阻塞非阻塞异步
线程消耗
适用场景小文件高并发大文件
复杂度较高

📡

在 NIO 中,Selector 的作用是什么,如何使用它实现多路复用?
哦呜(°ロ°)!NIO的Selector就像赛马场的总控台呢!看曼波用代码演示:

Selector selector = Selector.open();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
ssc.register(selector, SelectionKey.OP_ACCEPT);  // 注册关注的事件while(true) {int readyChannels = selector.select();  // 等待事件发生if(readyChannels == 0) continue;Set<SelectionKey> keys = selector.selectedKeys();for(SelectionKey key : keys){if(key.isAcceptable()) {  // 有新连接// 处理接受连接} else if(key.isReadable()) {  // 可读事件// 处理读操作}}keys.clear();  // 清空处理完的key
}

(✪▽✪)曼波~~ 多路复用就像同时监控多匹赛马的状态,一个驯马师(线程)就能管理整个马场!

🚀

请说明在高并发网络编程中,AIO 相较于 NIO 的优势。

曼波觉得AIO的优势就像自动喂马机呢(≧ω≦)/

  • NIO需要主动查看每个马厩(轮询)
  • AIO马儿饿了会自己按铃(回调通知)
// AIO服务端示例
AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel.open();
server.bind(new InetSocketAddress(8888));// 异步接受连接
server.accept(null, new CompletionHandler<>() {public void completed(AsynchronousSocketChannel client, Object attachment) {// 自动处理新连接ByteBuffer buffer = ByteBuffer.allocate(1024);client.read(buffer, null, new CompletionHandler<>(){/* 读完成回调 */});}
});

优势总结:

  1. 完全异步避免线程阻塞
  2. 回调机制减少线程切换
  3. 适合处理耗时长的I/O操作(比如大文件传输)

(✪▽✪)曼波~~~~!最后给备考的小建议:

  • 面试时要举实际场景例子(比如聊天室用NIO,视频传输用AIO)
  • 记得区分同步/异步与阻塞/非阻塞的区别
  • 画图说明Selector工作原理会加分哦!

需要曼波用更可爱的比喻再解释哪里吗?(*≧ω≦) 随时可以问哦!

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

相关文章:

  • L2-033 简单计算器满分笔记
  • 十三种通信接口芯片——《器件手册--通信接口芯片》
  • 解决“驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接“问题
  • 【C++面向对象】封装(下):探索C++运算符重载设计精髓
  • C++每日训练 Day 16:构建 GUI 响应式信号机制(面向初学者)
  • android liveData observeForever 与 observe对比
  • class的访问器成员
  • TAS(Thin-Agent服务)的先决条件与安装指南
  • 安当ASP身份认证系统:低成本方案实现堡垒机/防火墙/VPN二次认证升级
  • 《Learning Langchain》阅读笔记2-基于 Gemini 的 Langchain PromptTemplate 实现方式
  • [C++] STL中的向量容器<vector>附加练习
  • 赛灵思 XCVU440-2FLGA2892E XilinxFPGA Virtex UltraScale
  • Qt 信号与槽复习
  • 【Springboot】项目Demo
  • git rebase的使用
  • 某客户ORA-600 导致数据库反复重启问题分析
  • 如何判断单片机性能极限?
  • Linux 网络配置
  • OpenHarmony - 小型系统内核(LiteOS-A)(七)
  • GPT,Bert类模型对比
  • 16-算法打卡-哈希表-两个数组的交集-leetcode(349)-第十六天
  • 使用 PM2 启动node服务,并添加监控接口
  • Linux系统之restore命令的基本使用
  • d3.js绘制组合PCA边缘分布图
  • 数据结构(6)
  • MYOJ_11700(UVA10591)Happy Number(快乐数)(超快解法:图论思想解题)
  • 阿尔特拉 EP1C12F324I7N AlteraFPGA Cyclone
  • Redis——数据结构
  • 【ELF2学习板】OpenCL程序测试
  • 逻辑删除表结构如何加唯一索引?