1. Buffer:
简介:一种用于特定的基本类型的数据容器。缓冲区是特定的基本类型的线性、有限序列。它的基本属性除了内容外还包括容量、限制和位置。
2. ByteBuffer:字节缓冲区
此类针对字节缓冲区定义了以下六类操作:
- 读写单个字节的绝对和相对 get 和 put 方法;
- 将此缓冲区的连续字节序列传输到数组中的相对批量 get 方法;
- 将字节数组或其他字节缓冲区中的连续字节序列传输到此缓冲区的相对批量 put 方法;
- 读写其他基本类型值,并按照特定的字节顺序在字节序列之间转换这些值的绝对和相对 get 和 put 方法;
- 创建视图缓冲区 的方法,这些方法允许将字节缓冲区视为包含其他基本类型值的缓冲区;
- 对字节缓冲区进行 compacting、duplicating 和 slicing 的方法。
字节缓冲区可以通过 allocation 方法创建,此方法为该缓冲区的内容分配空间,或通过 wrapping 方法将现有的字节数组包装到缓冲区中来创建。
3. CharBuffer:
4. DoubleBuffer
5. FloatBuffer
6. IntBuffer
7. LongBuffer
8. ShortBuffer
9. ByteOrder:字节顺序的类型安全枚举
10. MappedByteBuffer:直接字节缓冲区,其内容是文件的内存映射区域
映射的字节缓冲区是通过 FileChannel.map
方法创建的。此类用特定于内存映射文件区域的操作扩展 ByteBuffer
类。
映射的字节缓冲区和它所表示的文件映射关系在该缓冲区本身成为垃圾回收缓冲区之前一直保持有效。
Java.nio.Channels
接口:
可读取和写入字节的信道。此接口只是统一了 ReadableByteChannel 和 WritableByteChannel;它没有指定任何新操作。
可读取字节的通道。
在任意给定时刻,一个可读取通道上只能进行一个读取操作。如果某个线程在通道上发起读取操作,那么在第一个操作完成之前,将阻塞其他所有试图发起另一个读取操作的线程。其他种类的 I/O 操作是否继续与读取操作并发执行取决于该通道的类型。
可写入字节的通道。
在任意给定时刻,一个可写入通道上只能进行一个写入操作。如果某个线程在通道上发起写入操作,那么在第一个操作完成之前,将阻塞其他所有试图发起另一个写入操作的线程。其他种类的 I/O 操作是否继续与写入操作并发执行则取决于该通道的类型。
l Channel
用于 I/O 操作的连接。
通道表示到实体,如硬件设备、文件、网络套接字或可以执行一个或多个不同 I/O 操作(如读取或写入)的程序组件的开放的连接。
通道可处于打开或关闭状态。创建通道时它处于打开状态,一旦将其关闭,则保持关闭状态。
可从缓冲区序列写入字节的通道。
l 集中 写入操作可在单个调用中写入来自一个或多个给定缓冲区序列的字节序列。集中写入通常在实现网络协议或文件格式时很有用,例如将数据分组放入段中(这些段由一个或多个长度固定的头,后跟长度可变的正文组成)。在 ScatteringByteChannel
接口中定义了类似的分散 读取操作。
可将字节读入缓冲区序列的通道。
分散 读取操作可在单个调用中将一个字节序列读入一个或多个给定的缓冲区序列。分散读取通常在实现网络协议或文件格式时很有用,例如将数据分组放入段中(这些段由一个或多个长度固定的头,后跟长度可变的正文组成)。在 GatheringByteChannel
接口中定义了类似的集中 写入操作
可被异步关闭和中断的通道。
实现此接口的通道是可异步关闭的:如果某个线程阻塞于可中断通道上的 I/O 操作中,则另一个线程可调用该通道的 close
方法。这将导致已阻塞线程接收到 AsynchronousCloseException
。
实现此接口的通道也是可中断的:如果某个线程阻塞于可中断通道上的 I/O 操作中,则另一个线程可调用该阻塞线程的 interrupt
方法。这将导致该通道被关闭,已阻塞线程接收到 ClosedByInterruptException
,并且设置已阻塞线程的中断状态。
如果已设置某个线程的中断状态并且它在通道上调用某个阻塞的 I/O 操作,则该通道将关闭并且该线程立即接收到 ClosedByInterruptException
;并仍然设置其中断状态。
当且仅当某个通道实现此接口时,该通道才支持异步关闭和中断。如有必要,可在运行时通过 instanceof 操作符进行测试。
类:
l Channels:针对信道和流的实用工具方法。
l FileChannel:用于读取、写入、映射和操作文件的通道
l FileChannel.MapMode: 文件映射模式的类型安全的枚举。
l FileLock:表示文件区域锁定的标记。
l Pipe
实现单向管道传送的通道对。
管道由一对通道组成:一个可写入的 sink 通道和一个可读取的 source 通道。一旦将某些字节写入接收器通道,就可以按照与写入时完全相同的顺序从源通道中读取这些字节。
在另一个线程从管道中读取这些字节或先前已写入的字节之前,是否阻塞将该字节写入管道的线程是与系统相关的,因此是未指定的。很多管道实现都对接收器
l Pipe.SinkChannel 表示 Pipe
的可写入结尾的通道
l Pipe.SourceChannel 表示 Pipe
的可读取结尾的通道
l Selector
SelectableChannel
对象的多路复用器。
可通过调用此类的 open
方法创建选择器,该方法将使用系统的默认选择器提供程序创建新的选择器。也可通过调用自定义选择器提供程序的 openSelector
方法来创建选择器。通过选择器的 close
方法关闭选择器之前,它一直保持打开状态。
可通过 Selector 实现多路复用的通道。
为了与选择器一起使用,此类的实例必须首先通过 register 方法进行注册。此方法返回一个表示该通道已向选择器注册的新 SelectionKey 对象。
向选择器注册后,通道在注销 之前将保持注册状态。注销涉及释放选择器已分配给该通道的所有资源。
不能直接注销通道;相反,必须取消 表示通道注册的键。取消某个键要求在选择器的下一个选择操作期间注销通道。可通过调用某个键的 cancel 方法显式地取消该键。无论是通过调用通道的 close 方法,还是中断阻塞于该通道上 I/O 操作中的线程来关闭该通道,都会隐式地取消该通道的所有键。
如果选择器本身已关闭,则将注销该通道,并且表示其注册的键将立即无效。
一个通道至多只能在任意特定选择器上注册一次。
可通过调用 isRegistered 方法来确定是否向一个或多个选择器注册了某个通道。
多个并发线程可安全地使用可选择的通道。
l SelectionKey 表示 SelectableChannel
在 Selector
中的注册的标记。
l ServerSocketChannel 针对面向流的侦听套接字的可选择通道
l DatagramChannel 针对面向数据报套接字的可选择通道
SocketChannel针对面向流的连接套接字的可选择通道。
Charset :16 位的 Unicode 代码单元序列和字节序列之间的命名映射关系。此类定义了用于创建解码器和编码器以及检索与 charset 关联的各种名称的方法。此类的实例是不可变的。
CharsetDecoder 能够把特定 charset 中的字节序列转换成 16 位 Unicode 字符序列的引擎。
输入字节序列由字节缓冲区或一系列这样的缓冲区提供。输出字符序列写入字符缓冲区或一系列这样的缓冲区。应该始终通过下面的方法调用序列使用解码器,下文称为解码操作:
l 通过 reset
方法重置解码器,除非以前未使用过;
l 只要有其他的输入数据就应零次或多次调用 decode
,为 endOfInput 参数传递 false,在调用之间填充输入缓冲区并刷新输出缓冲区。
l 最后时刻调用一次 decode
方法,为 endOfInput 参数传递 true;然后
调用 flush 方法,这样解码器能够将任何内部状态刷新到输出缓冲区。
CharsetEncoder 能够把 16 位 Unicode 字符序列转换成特定 charset 中字节序列的引擎。
输入字符序列由字符缓冲区或一系列这样的缓冲区提供。输出字节序列写入字节缓冲区或一系列这样的缓冲区。应该始终通过下面的方法调用序列使用编码器,下文称为编码操作:
l 通过 reset
方法重置编码器,除非以前未使用过;
l 只要有其他的输入数据就应零次或多次调用 encode
,为 endOfInput 参数传递 false,在调用之间填充输入缓冲区并刷新输出缓冲区。
l 最后时刻调用一次 encode
方法,为 endOfInput 参数传递 true;然后
l 调用 flush
方法,这样编码器能够将任何内部状态刷新到输出缓冲区
CoderResult coder 结果状态的描述。
charset coder(即解码器或编码器)使用输入缓冲区中的字节(或字符)、对它们进行转换,并将结果字符(或字节)写入输出缓冲区
CodingErrorAction编码错误操作的类型安全的枚举。
此类的实例用来指定 charset 的解码器和编码器如何处理错误输入和不可映射的字符错误