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

一文讲解Java中的BIO、NIO、AIO之间的区别

BIO、NIO、AIO是Java中常见的三种IO模型
在这里插入图片描述

  • BIO:采用阻塞式I/O模型,线程在执行I/O操作时被阻塞,无法处理其他任务,适用于连接数比较少的场景;
  • NIO:采用非阻塞 I/O 模型,线程在等待 I/O 时可执行其他任务,通过 Selector 监控多个 Channel 上的事件,适用于连接数多但连接时间短的场景。
  • AIO:使用异步 I/O 模型,线程发起 I/O 请求后立即返回,当 I/O 操作完成时通过回调函数通知线程,适用于连接数多且连接时间长的场景。

简单说一下BIO

  • BIO,也就是传统的 IO,基于字节流或字符流(如 FileInputStream、BufferedReader 等)进行文件读写,基于 Socket 和 ServerSocket 进行网络通信。对于每个连接,都需要创建一个独立的线程来处理读写操作。

在这里插入图片描述

简单说一下NIO

  • NIO,JDK 1.4 时引入,放在 java.nio 包下,提供了 Channel、Buffer、Selector 等新的抽象,基于 RandomAccessFile、FileChannel、ByteBuffer 进行文件读写,基于 SocketChannel 和 ServerSocketChannel 进行网络通信。

    实际上,“旧”的 I/O 包已经使用 NIO 重新实现过,所以在进行文件读写时,NIO 并无法体现出比 BIO 更可靠的性能。

    NIO 的魅力主要体现在网络编程中,服务器可以用一个线程处理多个客户端连接,通过 Selector 监听多个 Channel 来实现多路复用,极大地提高了网络编程的性能。

在这里插入图片描述
缓冲区Buffer也能极大提升一次IO操作的效率

在这里插入图片描述
简单说一下AIO

  • AIO 是 Java 7 引入的,放在 java.nio.channels 包下,提供了 AsynchronousFileChannel、AsynchronousSocketChannel 等异步 Channel。

  • 它引入了异步通道的概念,使得 I/O 操作可以异步进行。这意味着线程发起一个读写操作后不必等待其完成,可以立即进行其他任务,并且当读写操作真正完成时,线程会被异步地通知。

AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(Paths.get("test.txt"), StandardOpenOption.READ);
ByteBuffer buffer = ByteBuffer.allocate(1024);
Future<Integer> result = fileChannel.read(buffer, 0);
while (!result.isDone()) {
    // do something
}

http://www.kler.cn/a/525758.html

相关文章:

  • 解码,蓝桥杯2020G
  • HttpClient学习
  • GSI快速收录服务:让你的网站内容“上架”谷歌
  • 不背单词快捷键(不背单词键盘快捷键)
  • 二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2
  • Zookeeper(31)Zookeeper的事务ID(zxid)是什么?
  • 力扣动态规划-15【算法学习day.109】
  • JavaScript 进阶(上)
  • openRv1126 AI算法部署实战之——TensorFlow TFLite Pytorch ONNX等模型转换实战
  • 开源 OA 办公系统
  • AI大模型开发原理篇-9:GPT模型的概念和基本结构
  • 亚博microros小车-原生ubuntu支持系列:17 gmapping
  • 指针(C语言)从0到1掌握指针,为后续学习c++打下基础
  • 小程序-基础加强-自定义组件
  • Java Stream API中的状态性操作与陷阱
  • JSR303校验教学
  • 某盾Blackbox参数参数逆向
  • 网络安全技术简介
  • Linux gdisk 命令使用详解
  • 跨平台物联网漏洞挖掘算法评估框架设计与实现文献综述之总结与展望
  • 未来可期|在真实与虚拟之间:AI+游戏如何再造娱乐体验
  • 74-《猴面小龙兰》
  • EtherCAT主站IGH-- 22 -- IGH之fsm_sii.h/c文件解析
  • unity学习23:场景scene相关,场景信息,场景跳转
  • HCIA-Access V2.5_10_1_PPP协议
  • 【Block总结】OutlookAttention注意力,捕捉细节和局部特征|即插即用