java IO/NIO/AIO

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

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

📚

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

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

java 复制代码
// 传统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) {
        // 读取完成自动调用
    }
});

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

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

📡

在 NIO 中,Selector 的作用是什么,如何使用它实现多路复用?

哦呜(°ロ°)!NIO的Selector就像赛马场的总控台呢!看曼波用代码演示:

java 复制代码
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马儿饿了会自己按铃(回调通知)
java 复制代码
// 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工作原理会加分哦!

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

相关推荐
阿童木写作5 分钟前
Python实现Temu图片批量翻译自动化教程
运维·人工智能·python·自动化
就是一只白1 小时前
复制地理信息python版本
python
看浪的路人1 小时前
第1讲:Agent 到底是什么?和 Chatbot 有什么区别
python·ai
都叫我大帅哥2 小时前
Java JJWT 完全指南:从入门到生产级实践
java
瓦学妹2 小时前
什么是网络索引?它是如何工作的?
大数据·网络·python·网络爬虫
天天爱吃肉82183 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
前端开发张小七3 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
海盗12343 小时前
微软技术周报 ——2026-08-03
后端·python·microsoft·c#·.netcore
大数据魔法师3 小时前
【最全详解】DuckDB Python 全套 API 语法、参数与实战用法(零基础全覆盖)
python·数据分析
ThsPool4 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript