NIO API的集中抽象为:
l 缓冲区, 它们是数据容器;
Buffers | Description |
Position, limit, and capacity; | |
Get/put, compact, views; allocate, wrap | |
A byte buffer mapped to a file | |
Get/put, compact; allocate, wrap | |
' ' | |
' ' | |
' ' | |
' ' | |
' ' | |
Typesafe enumeration for byte orders |
缓冲区是一个固定数据量的指定基本类型的数据容器. 除内容之外, 缓冲区还具有位置和界限, 其中位置是要读写的下一个元素的索引, 界限是第一个应该读写的元素的索引. 基本Buffer类定义了这些属性以及清除,反转和重绕方法, 用以标记当前位置, 以及将当前位置重置为前一个标记处.
每个非布尔基本类型都有一个缓冲区类. 每个类定义了一系列用于将数据移出或移入缓冲区的get和put方法, 用于压缩, 复制和切片缓冲区的方法, 以及用于分配新缓冲区和将现有数组包装到缓冲区中的静态方法.
因为字节缓冲区可以用作I/O操作的源缓冲区和目标缓冲区, 所以可以对它们加以区分. 它们还支持其他缓冲区类所没有的几个特性:
• 可以将字节缓冲区分配为一个直接缓冲区, 在这种情况下, Java虚拟机将最大限度地直接在缓冲区上执行本机I/O操作.
• 可以通过mapping将文件区域直接包装到内存中来创建字节缓冲区, 在这种情况下, 可以使用MappedByteBuffer类中定义的几个其他文件相关的操作.
• 字节缓冲区提供了对其内容的访问(其内容作为任何非布尔基本类型的异类或同类二进制数据序列), 访问要么是以big-endian字节顺序进行, 要么是以little-endian字节顺序进行.
l 字符集, 及其相关解码器和编码器,它们在字节和Unicode字符之间进行转换;
l 各种类型的通道, 它们表示能够执行IO操作的实体的连接; 以及选择器和选择键, 它们与可选择信道一起定义了多路的,无阻塞的I/O设施.
Feb 25, 2016