Package java.nio.channels
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
接口的方法,通道的当前位置为query
和modify
,以及size
。
ScatteringByteChannel
和GatheringByteChannel
接口分别扩展了ReadableByteChannel
和WritableByteChannel
接口,添加了read
和write
方法, 这些方法采用一系列缓冲区而不是单个缓冲区。
NetworkChannel
接口指定bind
通道套接字的方法,获取套接字绑定的地址,以及get
和set
套接字选项的方法。 MulticastChannel
接口指定加入Internet协议(IP)多播组的方法。
Channels
实用程序类定义了静态方法,这些方法支持java.io
程序包的流类与此程序包的通道类的互操作。 可以从InputStream
或OutputStream
构造适当的通道,相反地,可以从通道构造InputStream
或OutputStream
。 可以构造Reader
,其使用给定的字符集来解码来自给定可读字节信道的字节,相反,可以构造Writer
,其使用给定的字符集将字符编码为字节并将它们写入给定的可写字节信道。
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
的方法FileInputStream
, FileOutputStream
,或RandomAccessFile
返回连接到相同的基本文件作为一个文件通道java.io
类。
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更具可扩展性,由选择器 , 可选通道和选择键提供 。
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
子类。
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
-
接口摘要 接口 描述 AsynchronousByteChannel 一个可以读写字节的异步通道。AsynchronousChannel 支持异步I / O操作的通道。ByteChannel 一个可以读写字节的通道。Channel I / O操作的关系。CompletionHandler<V,A> 用于消耗异步I / O操作结果的处理程序。GatheringByteChannel 一个可以从一系列缓冲区写入字节的通道。InterruptibleChannel 可以异步关闭和中断的通道。MulticastChannel 支持Internet协议(IP)多播的网络通道。NetworkChannel 到网络套接字的通道。ReadableByteChannel 一个可以读取字节的通道。ScatteringByteChannel 一个可以将字节读入缓冲区序列的通道。SeekableByteChannel 一个字节通道,用于维护当前 位置并允许更改位置。WritableByteChannel 可以写入字节的通道。 -
类摘要 类 描述 AsynchronousChannelGroup 用于资源共享的一组异步通道。AsynchronousFileChannel 用于读取,写入和操作文件的异步通道。AsynchronousServerSocketChannel 面向流的侦听套接字的异步通道。AsynchronousSocketChannel 面向流的连接套接字的异步通道。Channels 通道和流的实用方法。DatagramChannel 面向数据报的套接字的可选通道。FileChannel 用于读取,写入,映射和操作文件的通道。FileChannel.MapMode 文件映射模式的类型安全枚举。FileLock 表示文件区域锁定的标记。MembershipKey 表示Internet协议(IP)多播组成员身份的令牌。Pipe 一对实现单向管道的通道。Pipe.SinkChannel Pipe.SourceChannel SelectableChannel SelectionKey 表示SelectableChannel
与Selector
注册的令牌。Selector SelectableChannel
对象的多路复用器。ServerSocketChannel 面向流的侦听套接字的可选通道。SocketChannel 用于面向流的连接套接字的可选通道。 -
异常摘要 异常 描述 AcceptPendingException 尝试在通道上启动接受操作并且先前的接受操作尚未完成时,抛出未经检查的异常。AlreadyBoundException 当尝试将套接字绑定到已绑定的面向网络的通道时,抛出未经检查的异常。AlreadyConnectedException 尝试连接已连接的SocketChannel
时 ,抛出未经检查的异常。AsynchronousCloseException 当另一个线程关闭通道或在I / O操作中被阻塞的通道部分时,线程收到的检查异常。CancelledKeyException 尝试使用不再有效的选择键时抛出未经检查的异常。ClosedByInterruptException 当一个线程在一个通道上的I / O操作中被阻塞时,另一个线程中断它时检查了异常。ClosedChannelException 当尝试在关闭或至少关闭该操作的通道上调用或完成I / O操作时,抛出检查异常。ClosedSelectorException 尝试在关闭的选择器上调用I / O操作时抛出未经检查的异常。ConnectionPendingException 尝试连接正在进行非阻塞连接操作的SocketChannel
时,抛出未经检查的异常。FileLockInterruptionException 当另一个线程在等待获取文件锁定时中断它时,线程收到的检查异常。IllegalBlockingModeException 在不正确的阻塞模式下在通道上调用阻塞模式特定的操作时,抛出未经检查的异常。IllegalChannelGroupException 尝试在不是由同一提供程序创建的组中打开通道时,抛出未经检查的异常。IllegalSelectorException 当尝试使用未由创建通道的提供程序创建的选择器注册通道时,抛出未经检查的异常。InterruptedByTimeoutException 在异步操作完成之前超时时,检查线程收到的异常。NoConnectionPendingException 当未经检查的异常finishConnect
一个方法SocketChannel
没有首先成功调用被调用connect
方法。NonReadableChannelException 尝试从最初未打开读取的通道读取时,抛出未经检查的异常。NonWritableChannelException 尝试写入最初未打开以进行写入的通道时,抛出未经检查的异常。NotYetBoundException 尝试在尚未绑定的服务器套接字通道上调用I / O操作时,抛出未经检查的异常。NotYetConnectedException 尝试在尚未连接的套接字通道上调用I / O操作时抛出未经检查的异常。OverlappingFileLockException 当尝试获取与已由同一Java虚拟机锁定的区域重叠的文件区域上的锁定时,或者当另一个线程已在等待锁定同一文件的重叠区域时,抛出未经检查的异常。ReadPendingException 尝试从异步套接字通道读取并且先前的读取尚未完成时抛出未经检查的异常。ShutdownChannelGroupException 当尝试在关闭的组中构造通道或由于通道组已终止而无法调用I / O操作的完成处理程序时,抛出未经检查的异常。UnresolvedAddressException 尝试在未解析的套接字地址上调用网络操作时抛出未经检查的异常。UnsupportedAddressTypeException 尝试绑定或连接到不受支持的类型的套接字地址时抛出未经检查的异常。WritePendingException 尝试写入异步套接字通道并且先前的写入尚未完成时,抛出未经检查的异常。