🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 什么是NIO? ``` 1. 同步非阻塞式IO 2. 一个请求一个线程 3. 客户端的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理 ``` ### IO vs NIO ``` 1. NIO可以替代标准的java IO, 提供了与标准IO不同的IO工作方式 2. IO基于字节流和字符流操作,NIO基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区, 或者是从缓冲区读取到通道中 3. 使用NIO,线程从通道读取数据到缓冲区时,现在还可以干其他的事,当数据被写入到缓冲区时,线程可以继续 处理它 4. NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达),因此,单个线程可以 监听多个数据通道 ``` ![](https://box.kancloud.cn/14a730b51a340c2fe1d3299693ab93bc_554x299.png) ![](https://box.kancloud.cn/15d3e0068412e415bbc013867e80e256_557x298.png) ### 区别 | IO | NIO | | --- | --- | | 面向流 | 面向缓冲区 | | 阻塞IO | 非阻塞IO | | 无 | 选择器 | ### Buffer ``` 1. 一个用于特定基本数据类型的容器 2. 所有缓冲区的抽象类都是Buffer的子类 3. Buffer就像一个数组,可以保存多个相同类型的数据 ``` ``` 子类: ByteBuffer CharBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer ```