nio包中主要通过下面两个方面来提高I/O操作效率:
* 通过Buffer和Channel来提高I/O操作的速度。
* 通过Selector来支持非阻塞I/O操作。
Channel and Buffer
Channel 和 buffer 是 NIO 是两个最基本的数据类型抽象。
Buffer:
是一块连续的内存块。
是 NIO 数据读或写的中转地。
Channel:
数据的源头或者数据的目的地
用于向 buffer 提供数据或者读取 buffer 数据 ,buffer 对象的唯一接口。
异步 I/O 支持
示例代码:
Buffer 内部结构
Charset
向 ByteBuffer 中存放数据时需要考虑字符集的编码(char-->byte)方式,读取展示 ByteBuffer 数据时涉及对字符集解码(byte-->char)。
Java.nio.charset 提供了编码解码一套解决方案。
以我们最常见的 http 请求为例,在请求的时候必须对请求进行正确的编码。在得到响应时必须对响应进行正确的解码。