通道
描述
ChannelA nexus for I/O operations ReadableByteChannelCan read into a buffer ScatteringByteChannelCan read into a sequence of buffers WritableByteChannelCan write from a buffer GatheringByteChannelCan write from a sequence of buffers ByteChannelCan read/write to/from a buffer SeekableByteChannelA ByteChannelconnected to an entity that contains a variable-length sequence of bytesNetworkChannelA channel to a network socket ChannelsUtility methods for channel/stream interoperation
信道表示与诸如硬件设备,文件,网络套接字或能够执行一个或多个不同的I / O操作(例如读取或写入)的程序组件的实体的开放连接。 按照Channel接口的规定,通道可以打开或关闭,并且它们都是异步关闭和可 中断的 。
Channel接口由其他几个接口扩展。
ReadableByteChannel接口指定一个read方法,该方法将通道中的字节读入缓冲区; 类似地, WritableByteChannel接口指定一个将缓冲区中的字节写入write方法write 。 ByteChannel接口将这两个接口统一为可以读取和写入字节的通道。 SeekableByteChannel接口将ByteChannel接口的方法扩展到query和modify通道的当前位置,以及size 。
ScatteringByteChannel和 GatheringByteChannel接口分别扩展了 ReadableByteChannel和 WritableByteChannel接口,添加了 read和 write方法,该方法采用一系列缓冲区而不是单个缓冲区。
NetworkChannel接口将方法指定为 bind通道的套接字,获取套接字绑定到的地址,以及指向 get和 set套接字选项的方法。
Channels实用程序类定义了静态方法,用于支持java.io包的流类与此包的通道类的互操作。 可以从InputStream或OutputStream构建适当的频道,相反地,可以从频道构建InputStream或OutputStream 。 可以构造一个Reader ,它使用给定的字符集来解码来自给定可读字节通道的字节,相反地,可以构造一个Writer ,它使用给定的字符集将字符编码为字节并将它们写入给定的可写字节通道。
档案频道
描述
FileChannelReads, writes, maps, and manipulates files FileLockA lock on a (region of a) file MappedByteBufferA direct byte buffer mapped to a region of a file
FileChannel类支持从连接到文件的通道读取字节和写入字节到通常的操作,以及查询和修改当前文件位置并将文件截断为特定大小的操作。 它定义了获取整个文件或文件特定区域的锁的方法; 这些方法返回FileLock类的实例。 最后,它定义了强制更新文件的方法,将其写入包含它的存储设备,以便在文件和其他通道之间有效地传输字节,并将文件的某个区域直接映射到内存中。
甲FileChannel通过调用创建getChannel的方法FileInputStream , FileOutputStream ,或RandomAccessFile返回连接到相同的基本文件作为java.io类文件信道。
多路复用的非阻塞I / O
描述
SelectableChannelA channel that can be multiplexed DatagramChannelA channel to a datagram-oriented socket Pipe.SinkChannelThe write end of a pipe Pipe.SourceChannelThe read end of a pipe ServerSocketChannelA channel to a stream-oriented listening socket SocketChannelA channel for a stream-oriented connecting socket SelectorA multiplexor of selectable channels SelectionKeyA token representing the registration
of a channel with a selectorPipeTwo channels that form a unidirectional pipe
通过 选择器 , 可选通道和 选择键提供多路复用的非阻塞I / O,它比面向线程的阻塞I / O更具可扩展性。
A selector是selectable channels的多路复用器 ,其又是可以放入non-blocking mode中的一种特殊类型的通道。 为了执行多路复用的I / O操作,首先创建一个或多个可选通道,进入非阻塞模式,并使用选择器registered 。 注册一个通道指定一组I / O操作,这些操作将由选择器进行测试,并返回代表注册的selection key 。
一旦一些频道已经被选择器注册,可以执行selection operation以便发现哪些频道(如果有的话)已经准备好执行一个或多个先前声明兴趣的操作。 如果频道准备就绪,那么在注册时返回的密钥将被添加到选择器的选定密钥集中 。 可以检查密钥集及其中的密钥,以确定每个通道准备好的操作。 从每个键可以检索相应的频道,以执行所需的任何I / O操作。
选择键表示它的通道已准备好进行某些操作,这是一个暗示,但不是保证,这样的操作可以由线程执行而不会导致线程阻塞。 执行多路复用I / O的代码必须写入,以便在证明不正确时忽略这些提示。
这个包定义对应于所述选择的信道的类DatagramSocket , ServerSocket和Socket在java.net包中定义的类。 为了支持与频道关联的套接字,对这些类进行了小的更改。 该软件包还定义了一个实现单向管道的简单类。 在所有情况下,通过调用相应类的静态open方法创建新的可选通道。 如果某个通道需要关联的套接字,则会创建套接字作为此操作的副作用。
选择器,可选通道和选择键的实现可以通过“插入” java.nio.channels.spi包中定义的SelectorProvider类的备选定义或实例来替代。 预计很多开发人员实际上不会使用这种设施; 它主要是为了让高级用户在需要非常高的性能时可以利用特定于操作系统的I / O复用机制。
多执行复用的I / O抽象所需的簿记和同步是由执行AbstractInterruptibleChannel , AbstractSelectableChannel , AbstractSelectionKey和AbstractSelector类在java.nio.channels.spi包。 在定义自定义选择器提供程序时,应仅将AbstractSelector和AbstractSelectionKey类直接进行子类化; 自定义通道类应扩展此包中定义的适当的SelectableChannel子类。
除非另有说明,否则将 null参数传递给此包中的任何类或接口中的构造函数或方法将导致引发 NullPointerException 。
| ByteChannel | 可以读取和写入字节的通道。 |
| Channel | I / O操作的联系。 |
| GatheringByteChannel | 可以从一系列缓冲区写入字节的通道。 |
| InterruptibleChannel | 可以异步关闭并中断的通道。 |
| NetworkChannel | 通往网络套接字的通道。 |
| ReadableByteChannel | 一个可以读取字节的通道。 |
| ScatteringByteChannel | 可以将字节读入缓冲区序列的通道。 |
| SeekableByteChannel | 保持当前 位置并允许更改 位置的字节通道。 |
| WritableByteChannel | 可以写入字节的通道。 |
| Channels | 频道和流的实用方法。 |
| DatagramChannel | 面向数据报套接字的可选通道。 |
| FileChannel | 用于读取,写入,映射和操作文件的通道。 |
| FileChannel.MapMode | 文件映射模式的类型安全枚举。 |
| FileLock | 表示文件区域上的锁定的令牌。 |
| Pipe | 一对实现单向管道的通道。 |
| Pipe.SinkChannel | 表示 Pipe的可写结束的 Pipe 。 |
| Pipe.SourceChannel | 代表 Pipe可读端的 Pipe 。 |
| SelectableChannel | 可以通过 Selector进行多路复用的 Selector 。 |
| SelectionKey | 表示 SelectableChannel与 Selector注册的令牌。 |
| Selector | 一个 SelectableChannel对象的多路复用器。 |
| ServerSocketChannel | 面向流式侦听套接字的可选频道。 |
| SocketChannel | 面向流的连接插槽的可选通道。 |
| AlreadyBoundException | 当尝试将套接字绑定到已绑定的面向网络的通道时,抛出未经检查的异常。 |
| AlreadyConnectedException | 尝试连接已连接的 SocketChannel时引发未经检查的异常。 |
| AsynchronousCloseException | 当另一个线程关闭通道或其在I / O操作中被阻塞的通道部分时,线程收到检查异常。 |
| CancelledKeyException | 尝试使用不再有效的选择键时引发未经检查的异常。 |
| ClosedByInterruptException | 当另一个线程在通道上的I / O操作中被阻塞时另一个线程中断该线程时检查到异常。 |
| ClosedChannelException | 当尝试调用或完成对已关闭或至少关闭该操作的通道的I / O操作时检测到异常。 |
| ClosedSelectorException | 当试图在关闭的选择器上调用I / O操作时抛出未经检查的异常。 |
| ConnectionPendingException | 当试图连接已经进行非阻塞连接操作的 SocketChannel ,将引发未经检查的异常。 |
| FileLockInterruptionException | 当另一个线程在等待获取文件锁定时中断线程时收到线程收到的检查异常。 |
| IllegalBlockingModeException | 当在不正确的阻止模式下的通道调用特定于阻止模式的操作时,抛出未经检查的异常。 |
| IllegalSelectorException | 当尝试注册一个不是由创建该通道的提供者创建的选择器的通道时,抛出未经检查的异常。 |
| NoConnectionPendingException | 当未经检查的异常 finishConnect一个方法 SocketChannel没有首先成功调用被调用 connect方法。 |
| NonReadableChannelException | 当尝试从原本不打开阅读的频道读取时抛出未经检查的异常。 |
| NonWritableChannelException | 尝试写入最初未打开写入的频道时引发未经检查的异常。 |
| NotYetBoundException | 尝试在尚未绑定的服务器套接字通道上调用I / O操作时引发未经检查的异常。 |
| NotYetConnectedException | 尝试在尚未连接的套接字通道上调用I / O操作时引发未经检查的异常。 |
| OverlappingFileLockException | 当试图获取与已经被同一个Java虚拟机锁定的区域重叠的文件区域的锁时,或者另一个线程已经在等待锁定同一文件的重叠区域时,抛出未经检查的异常。 |
| UnresolvedAddressException | 当尝试在未解析的套接字地址上调用网络操作时引发未经检查的异常。 |
| UnsupportedAddressTypeException | 尝试绑定或连接到不受支持的类型的套接字地址时引发未经检查的异常。 |