[netty]编程一(基础概念)

( NIO) 库 是在 JDK 1. 4 中 引入 的。 NIO 弥补 了 原来 同步 阻塞 I/ O 的 不足, 它在 标准 Java 代码 中 提供 了 高速 的、 面向 块 的 I/ O。 通过 定义 包含 数据 的 类, 以及 通过 以 块 的 形式 处理 这些 数据, NIO 不用 使用 本机 代码 就可以 利用 低级 优化, 这是 原来 的 I/ O 包 所 无法 做到 的。

1.缓冲区Buffer

Buffer 是一 个 对象, 它 包含 一些 要 写入 或者 要 读出 的 数据。 在 NIO 类 库 中 加入 Buffer 对象, 体现 了 新 库 与 原 I/ O 的 一个 重要 区别。而在面向流的 I/ O 中, 可以将数据直接写入或者将数据直接读到 Stream 对象中。
在NIO库中,所有的数据都是通过缓存区处理的。在读取数据时是从缓存中读取;在写入数据时,写到缓冲区中。
缓冲区实质上是一个数组。通常它是一个字节数组(ByteBuffer),也可以使用其他种类的数组。但是一个缓冲区不仅仅是一个数组,缓冲区提供了对数据的结构化访问以及维护读写位置(limit)等信息。

ShortBuffer: 短 整型 缓冲区
IntBuffer: 整形 缓冲区 
LongBuffer: 长 整形 缓冲区 
FloatBuffer: 浮点 型 缓冲区 
DoubleBuffer: 双 精度 浮点 型 缓冲区

2.通道 Channel

Channel 是一 个 通道, 可以 通过 它 读取 和 写入 数据, 它 就 像 自来 水管 一样, 网络 数据 通过 Channel 读取 和 写入。 通道 与 流的 不同 之处 在于 通道 是 双向 的, 流 只是 在 一个 方向 上 移动( 一个 流 必须 是 InputStream 或者 OutputStream 的 子类), 而且 通道 可以 用于 读、 写 或者 同时 用于 读写。
Channel是全双工的

3.多路 复 用 器 Selector

多路 复 用 器 Selector, 它是JavaNIO编程基础,熟练掌握 Selector 对于掌握 NIO 编程 至关重要。 多路复用器提供选择已经就绪的任务的能力。 简单来讲 Selector 会 不断地轮询注册在其上的Channel, 如果某个Channel上面有新的TCP连接接入、 读 和 写 事件, 这个 Channel 就 处于 就绪 状态, 会被 Selector 轮 询 出来, 然后 通过 SelectionKey 可以 获取 就绪 Channel 的 集合, 进行 后续 的 I/ O 操作。

你可能感兴趣的:([netty]编程一(基础概念))