java 中 IO 流分为几种,BIO、NIO、AIO 有什么区别
时间: 2023-03-20 07:02:37 浏览: 235
Java中的IO流分为三种类型:BIO、NIO、AIO。
BIO是阻塞式IO,也就是说在读取或者写入数据时,线程会一直阻塞直到读取或写入完成。因为线程被阻塞,所以不能处理其它请求,会导致服务器性能下降。
NIO是非阻塞式IO,它的核心是使用了选择器(Selector)和通道(Channel)来实现非阻塞读写。Selector会不断地轮询注册在其上的Channel,如果某个Channel上面发生读或者写事件,这个Channel就处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续的IO操作。
AIO是异步IO,也叫做NIO.2。在AIO模式下,当进行IO操作时,不需要通过轮询的方式等待IO操作完成,而是直接返回。当IO操作完成后,系统会回调事先传入的CompletionHandler接口,在回调中进行后续的处理。
综上所述,BIO模式适合连接数目比较小且固定的架构,NIO模式适合连接数目多且连接比较短(轻操作)的架构,而AIO模式则适合连接数目多且连接比较长(重操作)的架构。
相关问题
栈和队列、IO流分类 BIO和NIO、AIO的区别
栈和队列:
栈(Stack)和队列(Queue)是两种基本的数据结构。二者都可以用数组或链表实现。它们的主要区别在于插入和删除元素的位置不同。
栈是一种后进先出(Last In First Out,LIFO)的数据结构,即最后插入的元素最先被删除。栈的插入和删除操作只能在栈顶进行。
队列是一种先进先出(First In First Out,FIFO)的数据结构,即最先插入的元素最先被删除。队列的插入操作在队尾进行,删除操作在队头进行。
IO流分类:
IO流是指数据在输入输出时按照流的形式传递的。根据数据传输的方向和类型,IO流可以分为四种类型:字节输入流、字节输出流、字符输入流、字符输出流。
BIO和NIO:
BIO(Blocking IO)和NIO(Non-blocking IO)是Java中IO操作的两种不同模型。
BIO是阻塞IO,也就是说,在进行IO操作时,如果数据还没有准备好,程序会一直等待,直到数据准备好才会进行下一步操作。BIO模型适合于连接数量比较少的情况。
NIO是非阻塞IO,它允许在等待IO操作时,同时进行其他操作,不会一直等待直到数据准备好。NIO模型适合于连接数量比较多的情况。
AIO:
AIO(Asynchronous IO)是一种基于事件驱动的IO模型,它不同于BIO和NIO的轮询方式,而是通过回调函数的方式来实现异步处理。AIO模型适合于大量的并发连接,可以提高IO效率。
阅读全文