Skip navigation links
Java™ Platform
Standard Ed. 8
compact2

Package java.nio.channels

定义通道,其表示与能够执行I / O操作的实体的连接,例如文件和套接字; 定义选择器,用于多路复用,非阻塞I / O操作。

See: 描述

Package java.nio.channels Description

定义通道,其表示与能够执行I / O操作的实体的连接,例如文件和套接字; 定义选择器,用于多路复用,非阻塞I / O操作。
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接口的方法扩展到querymodify通道当前位置,其size

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

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

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

File channels 描述
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类文件信道。

Multiplexed, non-blocking I/O

描述

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更加可扩展。

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

一旦有些频道已经向选择器注册,一个selection operation能够以发现哪些渠道,如果有的话,已经成为准备执行其权益以前曾宣布的操作的一个或多个进行。 如果通道准备就绪,则在注册时返回的密钥将被添加到选择器的选定密钥集中 可以检查密钥集合及其中的密钥,以确定每个信道准备好的操作。 从每个密钥可以检索相应的通道,以执行所需的任何I / O操作。

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

这个包定义对应于所述选择的信道的类DatagramSocketServerSocketSocketjava.net包中定义的类。 为了支持与通道相关的套接字,已经对这些类进行了微小的更改。 该包还定义了一个实现单向管道的简单类。 在所有情况下,通过调用相应类的静态open方法创建一个新的可选通道。 如果一个通道需要相关的套接字,那么将创建一个套接字作为此操作的副作用。

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

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

Asynchronous I/O 描述
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

与选择器,异步通道的实现可以通过“堵漏”的一个替代的定义或实例来替换AsynchronousChannelProviderjava.nio.channels.spi包中定义的类。 预计很多开发人员实际上不会使用这个设施; 主要提供这样的功能,以便在需要非常高的性能时,复杂的用户可以利用操作系统特定的异步I / O机制。


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

从以下版本开始:
1.4
Skip navigation links
Java™ Platform
Standard Ed. 8