NIO(二) 通道Channel

194 阅读1分钟
  • channel是位于一个字节缓冲区到实体直接的有效传输。就是字节缓冲区转化为文件或者流信息的一个管道.
    • 过程大致为
      • 1.填充缓冲区
      • 2.将缓冲区写道通道中
      • 3.接受缓冲区数据(flip),清空
  • 操作系统的文件描述符和操作系统的文件句柄与channel有着一对一的关系。
  • 通道是一种途径,借助该途径可以降低总开销来访问操作系统本身的I/O服务。缓冲区是通道连接的俩个端点,一个是起点一个是终点.
  • 通道接口的顶层父接口
public interface Channel extends Closeable {
    public boolean isOpen();//判断通道是否为开启状态
    public void close() throws IOException; //关闭通道
}

- 通道接口有许多扩展的接口

  • 同步通道接口

image.png

  • 网络套接字接口

image.png

  • 读写通道接口

image.png

  • 中断通道接口

image.png

  • I/O操作的类别
    • 文件I/O对应的通道是FileChannel这个实现类
    • StreamI/O 对应的通道是 socket通道

- 通道的使用

  • 通道可以说单向的也可以是双向的,类实现WritableByteChannel和ReadableByteChannel,实现一个是单项的,实现俩个是双向的接口.
  • fileChannel和其他双向通道是不一样的。虽然fileChannel也继承了ByteChannnel这个接口。但是一个连接到只读文件的Channel实力不能进行写操作。但是当FileChannel调用write()方法将抛出未检查的NonWriteableChannelException异常,因为FileInputStream对象总是以read-only的权限打开文件.