一、Java中的IO介绍
-
BIO:BlockingIO,同步式阻塞式IO,即传统的IO,是Java中最早期的流
-
NIO:Non-BlockingIO,又称New IO,同步式非阻塞式IO,是JDK1.4提供的流
-
AIO:AsynchronousIO,异步式非阻塞式IO,可以认为是NIO的二代版本,是JDK1.8提供的流
二、概述
-
NIO是JDK1.4出现的一个新的用于进行数据传输的流
-
全称是Non-Blocking IO,是一种同步式非阻塞式的IO,也是一种能供进行多路复用的IO
-
NIO中有3大组件:Buffer、Channel、Selector
-
NIO在使用的时候可以基于事件驱动方式来实现
三、BIO的缺点
-
一对一的连接方式:即每一个连接请求需要对应一个线程,在请求量大的情况下,会导致服务器端的压力非常大从而致使整个服务器的处理效率变低
-
阻塞:当线程在进行read或者write的时候,除非读完或者写完,否则在这个过程中不能发生任何操作
-
单向传输:数据只能从一端传向另一端,如果需要反向传输需要令创建流对象
四、NIO的特点
-
一对多的连接方式:利用一个或者少量线程处理大量的连接请求,降低服务器端的压力
-
非阻塞:在线程不能进行read或者write方法的时候,立即返回0,等待下一次操作
-
双向传输:利用通道可以实现数据的双向
五、NIO的缺点
-
在请求量比较大的情况下会出现部分请求的响应时间比较长的现象
-
不适用于长任务场景,不然会导致其他的请求无法处理
六、BIO和NIO的比较