Java Nio Buffer 六

2018/01/07 Java

Java Nio Buffer 六

通道

通道与操作系统的文件描述符(File Descriptor)和文件句柄(File Handle)有着一对一的关系。虽然通道比文件描述符更广义,但经常使用到的多数通道都是连接到开放的文件描述符的。Channel 类提供维持平台独立性所需的抽象过程,会模拟现代操作系统本身 的 I/O 性能。通道是一种途径,借助该途径,可以用最小的总开销来访问操作系统本身的 I/O 服务。
如图所示: 图一

通道类的继承关系

通道相关类的继承关系如下: 图二

Channel接口完整代码如下:

package java.nio.channels;
public interface Channel
{
    public boolean isOpen( );
    public void close( ) throws IOException;
}

通道实现经常使用操作系统的本地代码。通道接口允许以一种受控且可移植的方式来访问底层的 I/O 服务。
InterruptibleChannel 是一个标记接口,当被通道使用时可以标示该通道是可以中断的 (Interruptible)。如果连接可中断通道的线程被中断,那么该通道会以特别的方式工作,大多数通道都是可以中断的。
从 Channel 接口引申出的其他接口都是面向字节的子接口,包括 WritableByteChannelReadableByteChannel。通道只能在字节缓冲区上操作。层次结构表明其他数据类型的通道也可以从 Channel 接口引申而来。不过非字节实现是不可能的,因为操作系统都是以字节的形式实现底层 I/O 接口的。
类层次结构中有两个类位于一个不同的包: java.nio.channels.spi。这两个类是 AbstractInterruptibleChannel 和 AbstractSelectableChannel,它们分别为可中断的(interruptible)和可选择的(selectable)的通道实现提供所需的常用方法。尽管描述通道行为的接口都是在 java.nio.channels 包中定义的,不过具体的通道实现却都是从 java.nio.channels.spi 中的类引申来的。spi 包允许新通道实现以一种受控且模块化的方式被植入到 Java 虚拟机上。这意味着可以使用专为某种操作系统、文件系统或应用程序而优化的通道来使性能最大化。spi包中的方法普通用户不会需要使用。

Show Disqus Comments

Search

    Table of Contents