模块  java.base

Package java.nio.channels

定义通道,表示与能够执行I / O操作的实体的连接,例如文件和套接字; 定义选择器,用于多路复用,非阻塞I / O操作。 Lists channels and their descriptions Channels Description Channel A nexus for I/O operations ReadableByteChannel Can read into a buffer ScatteringByteChannel Can read into a sequence of buffers WritableByteChannel Can write from a buffer GatheringByteChannel Can write from a sequence of buffers ByteChannel Can read/write to/from a buffer SeekableByteChannel A ByteChannel connected to an entity that contains a variable-length sequence of bytes AsynchronousChannel Supports asynchronous I/O operations. AsynchronousByteChannel Can read and write bytes asynchronously NetworkChannel A channel to a network socket MulticastChannel Can join Internet Protocol (IP) multicast groups Channels Utility methods for channel/stream interoperation

通道表示与实体的开放连接,例如硬件设备,文件,网络套接字或能够执行一个或多个不同I / O操作(例如读取或写入)的程序组件。 Channel接口中所指定,通道可以是打开的也可以是关闭的,并且它们都是异步可关闭 中断的

Channel接口由其他几个接口扩展。

ReadableByteChannel接口指定read方法,该方法将字节从通道读入缓冲区; 类似地, WritableByteChannel接口指定write方法,该方法将字节从缓冲区写入通道。 ByteChannel接口统一了这两个接口,用于通道的读写字节。 SeekableByteChannel接口扩展了ByteChannel接口的方法,通道的当前位置为querymodify ,以及size

ScatteringByteChannelGatheringByteChannel接口分别扩展了ReadableByteChannelWritableByteChannel接口,添加了readwrite方法, 这些方法采用一系列缓冲区而不是单个缓冲区。

NetworkChannel接口指定bind通道套接字的方法,获取套接字绑定的地址,以及getset套接字选项的方法。 MulticastChannel接口指定加入Internet协议(IP)多播组的方法。

Channels实用程序类定义了静态方法,这些方法支持java.io程序包的流类与此程序包的通道类的互操作。 可以从InputStreamOutputStream构造适当的通道,相反地,可以从通道构造InputStreamOutputStream 可以构造Reader ,其使用给定的字符集来解码来自给定可读字节信道的字节,相反,可以构造Writer ,其使用给定的字符集将字符编码为字节并将它们写入给定的可写字节信道。

Lists file channels and their descriptions File channels Description FileChannel Reads, writes, maps, and manipulates files FileLock A lock on a (region of a) file MappedByteBuffer A direct byte buffer mapped to a region of a file

FileChannel类支持从连接到文件的通道读取字节和向其写入字节的常用操作,以及查询和修改当前文件位置并将文件截断为特定大小的操作。 它定义了获取整个文件或文件特定区域的锁的方法; 这些方法返回FileLock类的实例。 最后,它定义了强制更新文件的方法,以便将文件写入包含它的存储设备,以便有效地在文件和其他通道之间传输字节,以及将文件的区域直接映射到存储器中。

FileChannel通过调用其静态之一创建open方法,或通过调用getChannel的方法FileInputStreamFileOutputStream ,或RandomAccessFile返回连接到相同的基本文件作为一个文件通道java.io类。

Lists multiplexed, non-blocking channels and their descriptions Multiplexed, non-blocking I/O Description SelectableChannel A channel that can be multiplexed DatagramChannel A channel to a datagram-oriented socket Pipe.SinkChannel The write end of a pipe Pipe.SourceChannel The read end of a pipe ServerSocketChannel A channel to a stream-oriented listening socket SocketChannel A channel for a stream-oriented connecting socket Selector A multiplexor of selectable channels SelectionKey A token representing the registration of a channel with a selector Pipe Two channels that form a unidirectional pipe

多路复用,非阻塞I / O,比面向线程的阻塞I / O更具可扩展性,由选择器可选通道选择键提供

selectorselectable channels的多路复用器, 它又是可以放入non-blocking mode的特殊类型的通道。 要执行多路复用I / O操作,首先创建一个或多个可选通道,将其置于非阻塞模式,并使用选择器进行registered 注册通道指定将由选择器测试准备就绪的I / O操作集,并返回表示注册的selection key

一旦用选择器注册了一些通道,就可以执行selection operation ,以便发现哪些通道(如果有的话)已准备好执行先前声明的一个或多个操作。 如果某个通道已就绪,则注册时返回的密钥将被添加到选择器的选定密钥集中 可以检查密钥集及其中的密钥,以便确定每个信道准备好的操作。 从每个密钥可以检索相应的信道,以便执行所需的任何I / O操作。

选择键指示其通道已准备好进行某些操作,这是一个提示,但不能保证,这样的操作可以由线程执行而不会导致线程阻塞。 必须编写执行多路复用I / O的代码,以便在证明不正确时忽略这些提示。

这个包定义对应于所述选择的信道的类DatagramSocketServerSocket ,和Socket在定义的类java.net包。 对这些类进行了少量更改,以便支持与通道关联的套接字。 该包还定义了一个实现单向管道的简单类。 在所有情况下,通过调用相应类的静态open方法来创建新的可选通道。 如果通道需要关联的套接字,则会创建套接字作为此操作的副作用。

选择器,可选通道和选择键的实现可以通过“插入” java.nio.channels.spi包中定义的SelectorProvider类的替代定义或实例来替换。 预计许多开发人员实际上不会使用这种设施; 它主要是为了使高级用户在需要非常高的性能时可以利用特定于操作系统的I / O复用机制。

多执行复用的I / O抽象所需的簿记和同步是由执行AbstractInterruptibleChannelAbstractSelectableChannelAbstractSelectionKey ,和AbstractSelector类在java.nio.channels.spi包。 定义自定义选择器提供程序时,只应直接对AbstractSelectorAbstractSelectionKey类进行子类化; 自定义通道类应扩展此包中定义的相应SelectableChannel子类。

Lists asynchronous channels and their descriptions Asynchronous I/O Description AsynchronousFileChannel An asynchronous channel for reading, writing, and manipulating a file AsynchronousSocketChannel An asynchronous channel to a stream-oriented connecting socket AsynchronousServerSocketChannel An asynchronous channel to a stream-oriented listening socket CompletionHandler A handler for consuming the result of an asynchronous operation AsynchronousChannelGroup A grouping of asynchronous channels for the purpose of resource sharing

Asynchronous channels是一种特殊类型的通道,能够进行异步I / O操作。 异步通道是非阻塞的,并定义了启动异步操作的方法,返回表示每个操作的挂起结果的Future Future可用于轮询或等待操作结果。 异步I / O操作还可以指定在操作完成时调用的CompletionHandler 完成处理程序是用户提供的代码,执行该代码以消耗I / O操作的结果。

此包定义了连接到面向流的连接或侦听套接字或面向数据报的套接字的异步通道类。 它还定义了AsynchronousFileChannel类,用于异步读取,写入和操作文件。 FileChannel一样,它支持将文件截断为特定大小的操作,强制更新要写入存储设备的文件,或获取整个文件或文件特定区域的锁。 FileChannel不同,它没有定义将文件区域直接映射到内存的方法。 在需要存储器映射I / O的情况下,可以使用FileChannel

异步通道绑定到异步通道组以进行资源共享。 组具有关联的ExecutorService ,其中任务被提交以处理I / O事件并分派给完成处理程序,这些处理程序使用在组中的通道上执行的异步操作的结果。 可以选择在创建通道时指定组,也可以将通道绑定到默认组 复杂的用户可能希望创建自己的异步通道组或配置将用于默认组的ExecutorService

与选择器一样,异步通道的实现可以通过“插入” java.nio.channels.spi包中定义的AsynchronousChannelProvider类的替代定义或实例来替换。 预计许多开发人员实际上不会使用这种设施; 它主要是为了使高级用户在需要非常高的性能时可以利用特定于操作系统的异步I / O机制。

除非另有说明,否则将null参数传递给此包中任何类或接口中的构造函数或方法将导致抛出NullPointerException

从以下版本开始:
1.4