NIO API的核心抽象是:
Buffers ,它们是数据的容器;
Charsets及其相关的解码器和编码器 ,
它在字节和Unicode字符之间转换;
代表连接的各种类型的Channels
到能够执行I / O操作的实体; 和
选择器和选择键 ,以及
可选择的通道定义了一个multiplexed, non-blocking
I/O设施。
java.nio包定义了在整个NIO API中使用的缓冲区类。 charset API在java.nio.charset
包中定义,通道和选择器API在java.nio.channels
包中定义。 这些子包中的每一个都有自己的服务提供者(SPI)子包,其内容可用于扩展平台的默认实现或构建其他实现。
缓冲区
描述
Buffer
Position, limit, and capacity;
clear, flip, rewind, and mark/resetByteBuffer
Get/put, compact, views; allocate, wrap MappedByteBuffer
A byte buffer mapped to a file CharBuffer
Get/put, compact; allocate, wrap DoubleBuffer
' ' FloatBuffer
' ' IntBuffer
' ' LongBuffer
' ' ShortBuffer
' ' ByteOrder
Typesafe enumeration for byte orders
A buffer is a container for a fixed amount of data of a specific primitive type. In addition to its content a buffer has a position, which is the index of the next element to be read or written, and a limit, which is the index of the first element that should not be read or written. The base
Buffer
类定义了这些属性以及用于 清除 , 翻转和 倒带 , 标记当前位置以及将位置 重置为前一个标记的方法。
每个非布尔基元类型都有一个缓冲区类。 每个类定义了一系列用于将数据移出和移入缓冲区的get和put方法,用于压缩 , 复制和分割缓冲区的方法,以及用于分配新缓冲区的静态方法以及用于将现有数组封装到缓冲。
字节缓冲区的区别在于它们可以用作I / O操作的源和目标。 它们还支持其他缓冲区类中找不到的几项功能:
一个字节缓冲区可以分配为 direct缓冲区,在这种情况下,Java虚拟机将尽最大努力直接对其执行本地I / O操作。
字节缓冲区可以通过以下方式创建 mapping
的文件的区域直接进入存储器,在这种情况下,在定义了一些额外的文件相关的操作
MappedByteBuffer
类是可用的。
字节缓冲区提供对其内容的访问,作为任何非 布尔基元类型的非均匀或均匀序列,以大端或小端 byte order为单位 。
除非另有说明,否则将 null参数传递给此包中的任何类或接口中的构造函数或方法将导致引发 NullPointerException
。
Buffer | 一个特定基元类型数据的容器。 |
ByteBuffer | 一个字节缓冲区。 |
ByteOrder | 字节顺序的类型安全枚举。 |
CharBuffer | 一个字符缓冲区。 |
DoubleBuffer | 双缓冲区。 |
FloatBuffer | 一个浮点缓冲区。 |
IntBuffer | 一个int缓冲区。 |
LongBuffer | 很长的缓冲区。 |
MappedByteBuffer | 直接字节缓冲区,其内容是文件的内存映射区域。 |
ShortBuffer | 一个短缓冲区。 |
BufferOverflowException | 相对 放置操作达到目标缓冲区限制时引发的未检查异常。 |
BufferUnderflowException | 当相对 获取操作达到源缓冲区限制时引发的未检查异常。 |
InvalidMarkException | 未定义标记时尝试重置缓冲区时抛出未经检查的异常。 |
ReadOnlyBufferException | 在只读缓冲区上调用 put或 compact等内容突变方法时引发未经检查的异常。 |