官方解析
BIO、NIO、AIO 都是 Java 的 IO 模型。
BIO (Blocking IO) 是传统的 IO 模型,它在读写数据时会阻塞线程,直到数据读写完成,适用于并发不高的场景。
NIO (Non-blocking IO) 是 Java 的新 IO 模型,它在读写数据时不会阻塞线程,而是通过轮询的方式检查是否有数据可读写,适用于并发量较高的场景。
AIO (Asynchronous IO) 是 JDK 7 开始引入的新 IO 模型,它的读写方式与 NIO 相似,但在读写数据时,不需要自己手动轮询是否有数据可读写,而是交由系统完成,适用于高并发且处理较大数据量的场景。
总的来说,BIO 的并发处理能力较差,NIO 的并发处理能力较好,但使用起来较为复杂,AIO 的并发处理能力最好,但也是最为复杂的一种 IO 模型。选择适合自己场景的 IO 模型是非常重要的。
BIO、NIO、AIO 是 Java 中常用的 I/O 模型,它们都是针对网络编程中 I/O 操作的不同实现方式。
BIO,全称 Blocking I/O,也称为同步阻塞 I/O。
BIO 是最早的 I/O 模型,它是一种阻塞式的 I/O 模型,即当应用程序调用 I/O 操作时,该操作会一直阻塞线程直到操作完成,这会导致 I/O 性能低下。BIO 适用于连接数较小的场景,例如单线程的服务器模型。
NIO,全称 Non-Blocking I/O,也称为同步非阻塞 I/O。
NIO 是一种同步非阻塞的 I/O 模型,它的核心是 Selector 和 Channel,利用 Selector 监听多个 Channel 上的事件,当一个 Channel 上的事件到达时,它会被 Selector 转发给注册在这个 Selector 上的其他 Channel,这样可以用一个线程来处理多个请求,提高了 I/O 的效率。NIO 适用于连接数多、连接时间短的场景,例如实时聊天室、在线游戏等。
AIO,全称 Asynchronous I/O,也称为异步非阻塞 I/O。AIO 是 JDK1.7 引入的 I/O 模型,它的特点是异步处理 I/O 操作,当操作完成时会通知应用程序,相比于 NIO 的同步非阻塞 I/O,AIO 无需通过轮询操作完成状态,从而提高了 I/O 的效率。AIO 适用于连接数多、连接时间长的场景,例如 HTTP 长连接、文件操作等。
面试官问到这个问题,可能想了解你对 Java 中不同的 I/O 模型的了解程度,以及你能否根据不同的业务需求选择合适的 I/O 模型。同时,他可能还想了解你在实际开发中使用过哪些 I/O 模型,以及它们的应用场景。
BIO、NIO、AIO 都是 Java 中网络编程的 I/O 模型。
BIO(Blocking IO )是JDK1.4之前的传统IO模型,特点就是同步阻塞等待数据,直到数据读取完毕才会返回结果,线程会一直阻塞在 read/write 方法上,不能处理其他的 IO 请求,它的并发性能比较差。
NIO(Non-Blocking IO)是Java 1.4 之后新增的 IO 模型,它支持同步非阻塞式的 IO 操作。NIO 采用了多路复用器来处理 IO 请求,通过一个线程处理多个 IO 请求,实现了高并发处理。NIO 主要有三个核心概念:Selector、Channel、Buffer。Selector 负责监听多个 Channel 上的事件,Channel 可以理解为对原始 IO 的封装,Buffer 则是对数据的封装。
AIO(Asynchronous IO)是Java 1.7 之后新增的 IO 模型,它支持异步非阻塞 IO 操作。与 NIO 不同的是,AIO 在进行读写操作时不需要像 NIO 一样一直轮询,而是通过回调函数的方式在数据准备好后通知应用程序进行数据的读取,这样可以更加高效地利用系统资源,提高吞吐量。但是 AIO 在处理小文件和小数据量时的性能并不如 NIO。
三者区别
BIO 同步阻塞 IO,即打算约女神,给女神发短信后,没见到女神就一直等在宿舍楼下。
NIO 同步非阻塞 IO,即打算约女神,给女神发短信后,没见到女神就一直发短信。
NIO java中的 NIO,就是打算约女神,你让宿管大妈去挨个看每一个下楼的妹子,女神下楼了大妈就通知你。
AIO 就是打算约女神,你发完短信,你就去玩游戏了,女神下楼了,发短信给你,你才出现。