Most visited

Recently visited

Added in API level 1

java.nio.channels

Defines channels, which represent connections to entities that are capable of performing I/O operations, such as files and sockets; defines selectors, for multiplexed, non-blocking I/O operations.

通道

描述

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
  NetworkChannel A channel to a network socket
Channels Utility methods for channel/stream interoperation

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

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

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

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

NetworkChannel接口将方法指定为 bind通道的套接字,获取套接字绑定到的地址,以及指向 getset套接字选项的方法。

Channels实用程序类定义了静态方法,用于支持java.io包的流类与此包的通道类的互操作。 可以从InputStreamOutputStream构建适当的频道,相反地,可以从频道构建InputStreamOutputStream 可以构造一个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通过调用创建getChannel的方法FileInputStreamFileOutputStream ,或RandomAccessFile返回连接到相同的基本文件作为java.io类文件信道。

多路复用的非阻塞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子类。


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

Interfaces

ByteChannel 可以读取和写入字节的通道。
Channel I / O操作的联系。
GatheringByteChannel 可以从一系列缓冲区写入字节的通道。
InterruptibleChannel 可以异步关闭并中断的通道。
NetworkChannel 通往网络套接字的通道。
ReadableByteChannel 一个可以读取字节的通道。
ScatteringByteChannel 可以将字节读入缓冲区序列的通道。
SeekableByteChannel 保持当前 位置并允许更改 位置的字节通道。
WritableByteChannel 可以写入字节的通道。

Classes

Channels 频道和流的实用方法。
DatagramChannel 面向数据报套接字的可选通道。
FileChannel 用于读取,写入,映射和操作文件的通道。
FileChannel.MapMode 文件映射模式的类型安全枚举。
FileLock 表示文件区域上的锁定的令牌。
Pipe 一对实现单向管道的通道。
Pipe.SinkChannel 表示 Pipe的可写结束的 Pipe
Pipe.SourceChannel 代表 Pipe可读端的 Pipe
SelectableChannel 可以通过 Selector进行多路复用的 Selector
SelectionKey 表示 SelectableChannelSelector注册的令牌。
Selector 一个 SelectableChannel对象的多路复用器。
ServerSocketChannel 面向流式侦听套接字的可选频道。
SocketChannel 面向流的连接插槽的可选通道。

Exceptions

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 尝试绑定或连接到不受支持的类型的套接字地址时引发未经检查的异常。

Hooray!