通道(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()