一、什么是NIO
1、Java NIO全称java non-blocking IO, 是指JDK提供的新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为NIO(即New IO),是同步非阻塞的
2、NIO有三大核心部分: Channel(通道), Buffer(缓冲区),Selector(选择器)
3、NIO是面向缓冲区,或者面向块编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络。
二、NIO 与BIO 模型对比
BIO 是同步阻塞IO,服务器的模式是一个线程处理一个请求,当无响应时,会阻塞线程
NIO 同步非阻塞IO,会有一个Selector管理多个线程,当有事件发生后,进行处理、不会发生阻塞
三、NIO 与BIO的差异
1、BIO 以流的方式处理数据,而NIO以块的方式处理数据,块I/O 的效率比流I/O高很多
2、BIO 是阻塞的,NIO则是非阻塞的
3、BIO基 于字节流和字符流进行操作,而NIO 基于Channel(通道)和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据到达等),因此使用单个线程就可以监听多个客户端通道