1.Java NIO 基本介绍
1) Java NIO 全称 java non-blocking IO, 是指 JDK 提供的新 API。 从 JDK1.4 开始, Java 提供了一系列改进的
输入/输出的新特性, 被统称为 NIO(即 New IO), 是同步非阻塞的.
2) NIO 相关类都被放在 java.nio 包及子包下, 并且对原 java.io 包中的很多类进行改写。
3) NIO 有三大核心部分: Channel(通道), Buffer(缓冲区), Selector(选择器)
4) NIO 是 面向缓冲区 , 或者面向 块 编程的。 数据读取到一个它稍后处理的缓冲区, 需要时可在缓冲区中前后
移动, 这就增加了处理过程中的灵活性, 使用它可以提供非阻塞式的高伸缩性网络
5) Java NIO 的非阻塞模式, 使一个线程从某通道发送请求或者读取数据, 但是它仅能得到目前可用的数据, 如果
目前没有数据可用时, 就什么都不会获取, 而不是保持线程阻塞, 所以直至数据变的可以读取之前, 该线程可
以继续做其他的事情。 非阻塞写也是如此, 一个线程请求写入一些数据到某通道, 但不需要等待它完全写入,
这个线程同时可以去做别的事情
6) 通俗理解: NIO 是可以做到用一个线程来处理多个操作的。 假设有 10000 个请求过来,根据实际情况, 可以分配
50 或者 100 个线程来处理。 不像之前的阻塞 IO 那样, 非得分配 10000 个。
7) HTTP2.0 使用了多路复用的技术, 做到同一个连接并发处理多个请求, 而且并发请求的数量比 HTTP1.1 大了好
几个数量级
8) 案例说明 NIO 的 Buffer
import java.nio.IntBuffer; public class BasicBuffer { public static void main(String[] args) { //举例说明 Buffer 的使用 (简单说明) //创建一个 Buffer, 大小为 5, 即可以存放 5 个 int IntBuffer intBuffer = IntBuffer.allocate(5); //向 buffer 存放数据 // intBuffer.put(10); // intBuffer.put(11); // intBuffer.put(12); // intBuffer.put(13); // intBuffer.put(14); for(int i = 0; i < intBuffer.capacity(); i++) { intBuffer.put( i * 2); } // 如何从 buffer 读取数据 //将 buffer 转换, 读写切换(!!!) intBuffer.flip(); while (intBuffer.hasRemaining()) { System.out.println(intBuffer.get()); } }