包 java.nio.channels
Channels | Description |
---|---|
Channel |
I/O 操作的联系 |
ReadableByteChannel |
可以读入缓冲区 |
ScatteringByteChannel |
可以读入一系列缓冲区 |
WritableByteChannel |
可以从缓冲区写入 |
GatheringByteChannel |
可以从一系列缓冲区写入 |
ByteChannel |
可以读取/写入缓冲区 |
SeekableByteChannel |
ByteChannel 连接到包含可变长度字节序列的实体 |
AsynchronousChannel |
支持异步 I/O 操作。 |
AsynchronousByteChannel |
可以异步读写字节 |
NetworkChannel |
网络套接字的通道 |
MulticastChannel |
可以加入 Internet 协议 (IP) 多播组 |
Channels |
通道/流互操作的实用方法 |
A channel表示与硬件设备、文件、网络套接字或能够执行一个或多个不同 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
,它使用给定的字符集将字符编码为字节并将它们写入给定的可写字节通道。
文件通道 | Description |
---|---|
FileChannel |
读取、写入、映射和操作文件 |
FileLock |
锁定文件(区域) |
MappedByteBuffer |
映射到文件区域的直接字节缓冲区 |
FileChannel
类支持从连接到文件的通道读取字节和写入字节的常用操作,以及查询和修改当前文件位置以及将文件截断到特定大小的操作。它定义了获取整个文件或文件特定区域的锁的方法;这些方法返回 FileLock
类的实例。最后,它定义了强制将文件更新写入包含它的存储设备、在文件和其他通道之间高效传输字节以及将文件区域直接映射到内存的方法。
FileChannel
是通过调用其静态 open
方法之一,或通过调用 FileInputStream
、FileOutputStream
或 RandomAccessFile
的 getChannel
方法来创建的,以返回连接到与 java.io
类相同的底层文件的文件通道。
多路复用、非阻塞 I/O | Description |
---|---|
SelectableChannel |
可复用的通道 |
DatagramChannel |
到面向数据报的套接字的通道 |
Pipe.SinkChannel |
管道的写端 |
Pipe.SourceChannel |
管道的读取端 |
ServerSocketChannel |
面向流的监听套接字的通道 |
SocketChannel |
面向流的连接套接字的通道 |
Selector |
可选通道的多路复用器 |
SelectionKey |
表示使用选择器注册通道的令牌 |
Pipe |
形成单向管道的两个通道 |
多路复用的非阻塞 I/O,比面向线程的阻塞 I/O 更具可扩展性,由选择器, 可选通道, 和选择键.
selector 是 可选通道 的多路复用器,后者又是一种特殊类型的通道,可以放入 非阻塞模式 中。要执行多路复用 I/O 操作,首先创建一个或多个可选通道,将其置于非阻塞模式,并使用选择器registered
。注册一个通道指定了一组 I/O 操作,这些操作将由选择器测试准备就绪,并返回一个代表注册的 选择键。
一旦某些通道已向选择器注册,就可以执行选择操作以发现哪些通道(如果有的话)已准备好执行先前声明感兴趣的一个或多个操作。如果通道准备就绪,则注册时返回的密钥将被添加到选择器的选择键集.可以检查键集及其中的键以确定每个通道准备好执行的操作。从每个键中,可以检索相应的通道以执行所需的任何 I/O 操作。
选择键指示其通道已准备好进行某些操作是一种暗示,但不能保证这样的操作可以由线程执行而不会导致线程阻塞。必须编写执行多路复用 I/O 的代码,以便在证明不正确时忽略这些提示。
此包定义了与 java.net
包中定义的 DatagramSocket
、ServerSocket
和 Socket
类相对应的可选通道类。为了支持与通道关联的套接字,对这些类进行了细微更改。该包还定义了一个实现单向管道的简单类。在所有情况下,都会通过调用相应类的静态 open
方法来创建新的可选通道。如果一个通道需要一个关联的套接字,那么一个套接字将被创建作为这个操作的副作用。
DatagramChannel
、SocketChannel
和 ServerSocketChannel
可以使用不同的 protocol families
创建。 StandardProtocolFamily
中指定了标准族类型。
渠道互联网协议套接字是使用 INET
或 INET6
协议系列创建的。互联网协议套接字支持使用 TCP 和 UDP 的网络通信,并使用封装 IP 地址和端口号的 InetSocketAddress
es 进行寻址。互联网协议当通道工厂创建方法中未指定协议族时,套接字也是创建的默认类型。
的通道Unix域套接字是使用 UNIX
协议系列创建的。Unix域套接字支持同一主机上的本地进程间通信,并使用 UnixDomainSocketAddress
es 寻址,它封装了本地系统上的文件系统路径名。
选择器、可选通道和选择键的实现可以通过“插入”在 java.nio.channels.spi
包中定义的 SelectorProvider
类的替代定义或实例来替换。预计不会有很多开发人员实际使用此功能;提供它主要是为了让经验丰富的用户在需要非常高的性能时可以利用操作系统特定的 I/O 多路复用机制。
实现多路复用 I/O 抽象所需的大部分簿记和同步由 java.nio.channels.spi
包中的 AbstractInterruptibleChannel
、AbstractSelectableChannel
、AbstractSelectionKey
和 AbstractSelector
类执行。定义自定义选择器提供程序时,只有 AbstractSelector
和 AbstractSelectionKey
类应该直接被子类化;自定义通道类应扩展此包中定义的适当的 SelectableChannel
子类。
异步输入输出 | Description |
---|---|
AsynchronousFileChannel |
用于读取、写入和操作文件的异步通道 |
AsynchronousSocketChannel |
到面向流的连接套接字的异步通道 |
AsynchronousServerSocketChannel |
面向流的监听套接字的异步通道 |
CompletionHandler |
用于使用异步操作结果的处理程序 |
AsynchronousChannelGroup |
以资源共享为目的的一组异步通道 |
Asynchronous channels
是一种特殊类型的通道,能够进行异步 I/O 操作。异步通道是非阻塞的,并定义了启动异步操作的方法,返回一个 Future
表示每个操作的未决结果。 Future
可用于轮询或等待操作结果。异步 I/O 操作也可以指定一个 CompletionHandler
在操作完成时调用。完成处理程序是用户提供的代码,执行该代码以使用 I/O 操作的结果。
该包定义了异步通道类,这些类连接到面向流的连接或监听套接字,或面向数据报的套接字。它还定义了用于异步读取、写入和操作文件的AsynchronousFileChannel
类。与FileChannel
一样,它支持将文件截断到特定大小的操作,强制将文件更新写入存储设备,或者获取整个文件或文件特定区域的锁。与FileChannel
不同,它没有定义将文件区域直接映射到内存的方法。在需要内存映射 I/O 的地方,可以使用 FileChannel
。
异步通道绑定到一个异步通道组,目的是实现资源共享。一个组有一个关联的ExecutorService
,任务被提交给它来处理 I/O 事件并分派给完成处理程序,这些处理程序使用在组中的通道上执行的异步操作的结果。创建通道时可以选择指定组,或者通道可以绑定到 default group 。经验丰富的用户可能希望创建自己的异步通道组或配置将用于默认组的ExecutorService
。
与选择器一样,异步通道的实现可以通过“插入”java.nio.channels.spi
包中定义的 AsynchronousChannelProvider
类的替代定义或实例来替换。预计不会有很多开发人员实际使用此功能;提供它主要是为了让经验丰富的用户在需要非常高的性能时可以利用特定于操作系统的异步 I/O 机制。
除非另有说明,否则将 null
参数传递给此包中任何类或接口中的构造函数或方法将导致抛出 NullPointerException
。
- 自从:
- 1.4
-
类描述当尝试在通道上启动接受操作并且先前的接受操作尚未完成时抛出未经检查的异常。尝试将套接字绑定到已绑定的面向网络的通道时抛出未经检查的异常。尝试连接已连接的
SocketChannel
时抛出未经检查的异常。可以读写字节的异步通道。支持异步 I/O 操作的通道。以资源共享为目的的一组异步通道。当另一个线程关闭通道或它在 I/O 操作中阻塞的通道部分时,一个线程接收到的已检查异常。用于读取、写入和操作文件的异步通道。面向流的监听套接字的异步通道。面向流的连接套接字的异步通道。可以读取和写入字节的通道。尝试使用不再有效的选择键时抛出未经检查的异常。I/O 操作的联系。通道和流的实用方法。当另一个线程在通道上的 I/O 操作中被阻塞时中断它时,线程接收到的已检查异常。当尝试在已关闭或至少对该操作关闭的通道上调用或完成 I/O 操作时抛出已检查异常。尝试在关闭的选择器上调用 I/O 操作时抛出未经检查的异常。CompletionHandler <V,A> 用于使用异步 I/O 操作结果的处理程序。尝试连接SocketChannel
时抛出未经检查的异常,该非阻塞连接操作已在进行中。面向数据报的套接字的可选通道。用于读取、写入、映射和操作文件的通道。文件映射模式。表示对文件区域的锁定的标记。当另一个线程在等待获取文件锁时中断它时,一个线程接收到的已检查异常。可以从一系列缓冲区写入字节的通道。当在不正确的阻塞模式下对通道调用特定于阻塞模式的操作时抛出未经检查的异常。尝试打开不是由同一提供商创建的组中的通道时抛出未经检查的异常。当尝试使用不是由创建通道的提供者创建的选择器注册通道时抛出未经检查的异常。在异步操作完成之前超时过去时,线程接收到的已检查异常。可以异步关闭和中断的通道。表示 Internet 协议 (IP) 多播组成员资格的令牌。支持 Internet 协议 (IP) 多播的网络通道。网络套接字的通道。尝试从最初未打开进行读取的通道读取时抛出未经检查的异常。尝试写入最初未打开进行写入的通道时抛出未经检查的异常。尝试在尚未绑定的服务套接字通道上调用 I/O 操作时抛出未经检查的异常。尝试在尚未连接的套接字通道上调用 I/O 操作时抛出未经检查的异常。当尝试获取与已被同一 Java 虚拟机锁定的区域重叠的文件区域的锁时,或者当另一个线程已经在等待锁定同一文件的重叠区域时,抛出未经检查的异常。一对实现单向管道的通道。表示Pipe
可写端的通道。表示Pipe
可读端的通道。可以读取字节的通道。当尝试从异步套接字通道读取并且之前的读取尚未完成时抛出未经检查的异常。可以将字节读入缓冲区序列的通道。保持电流的字节通道position并允许更改位置。可以通过Selector
多路复用的通道。代表SelectableChannel
与Selector
注册的令牌。SelectableChannel
对象的多路复用器。面向流的监听套接字的可选通道。当尝试在已关闭的组中构造通道或由于通道组已终止而无法调用 I/O 操作的完成处理程序时,抛出未经检查的异常。面向流的连接套接字的可选通道。尝试对未解析的套接字地址调用网络操作时抛出未经检查的异常。尝试绑定或连接到类型不受支持的套接字地址时抛出未经检查的异常。可以写入字节的通道。当尝试写入异步套接字通道并且之前的写入尚未完成时抛出未经检查的异常。