4、NIO--通道的原理和获取

通道(Channel)

通道(Channel):由 java.nio.channels 包定义的。

Channel 表示 IO 源与目标打开的连接。
Channel 类似于传统的“流”。

只不过 Channel 本身不能直接访问数据,Channel 只能与Buffer 进行交互。

图解:

传统的方式

DMA:权限申请器

DMA总线

I/O流基于这种情况

大量的操作也会频繁的向cpu申请资源,会造成总线冲突的问题

最终也会影响cpu的性能

 

 通道的方式:

是一个完全独立的处理器

专门用于IO操作

拥有一套自己命令

附属于cpu

不需要进行向cpu获取资源

大型的io请求会比DMA请求较好

 

通道(Channel)

用于源节点与目标节点的链接

在Java NIO中负责缓冲区中数据的传输

Channel本身不存储数据

因此只需要配合缓冲区进行传输

通道的主要实现类:

java.nio.channels,Channel接口

  --FileChannel:专门用于操作本地文件

  --SocketChannel:网络io

  --ServerSocketChannel:网络io

  --DatagramChannel:网络io

获取通道:

1、Java针对支持通道的类提供了getChannel()方法

  本地IO:

    FileInputStream、FileOutputStream、RandomAccessFile

  网络IO:

    Socket、ServerSocket、DatagramSocket

2、JDK1.7 中的NIO2针对各个通道提供了一个静态的方法open()

3、JDK1.7 中的NIO2的Files工具类的newByteChannel()

原文地址:https://www.cnblogs.com/Mrchengs/p/10822898.html