版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/89281467
通道(channel)
- 通道(channel):由java.nio.channels 包定义的。Channel 表示IO源与目标打开的连接。Channel类类似于传统的“流”。只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。
jvm数据传输的发展
- 第一阶段:由CPU直接处理和管理IO接口并进行数据传输。
- 第二阶段:引入寄存器DMA(流的概念引入),在需要使用IO操作的时候,由寄存器DMA向CPU申请,然后再由寄存器统一管理IO接口,实现数据传输。
- 第三阶段:寄存器DMA换成通道Channel,通道独立开来不由CPU管,也不需要申请权限,只有由其对IO接口进行处理和管理,然后实现数据传输。
Channel主要实现类
- Java为Channel接口提供的最主要实现类如下:
- FileChannel : 用于读取、写入、映射和操作文件的通道
- DatagramChannel : 通过 UDP 读写网络中的数据通道。
- SocketChannel : 通过 TCP 读写网络中的数据。
- ServerSocketChannel : 可以监听新进来的 TCP 连接,对每一个新来进来的连接都会创建一个 SocketChannel。
获取通道
- 获取通道的一种方式是对支持通道的对象调用getChannel() 方法。支持通道的类如下:
- FileIputStream
- FileOutputStream
- RandomAccessFile
- DatagramSocket
- Socket
- ServerSocket
获取通道的其他方式是使用 Files 类的静态方法 newByteChannel()获取字节通道。或者通过通道的静态方法open() 打开并返回指定通道。
FileChannel的常用方法
/*
* 一、通道(Channel):用于资源节点与目标节点的连接。
* 在Java NIO 中负责缓冲中数据的传去。
* Channel本身不存储数据,需要配合缓冲区进行传输。
*
* 二、通道的主要实现类
* java.nio.channels.Channel 接口:
* |--FileChannel :
* |--SokectChannel
* |--SeverSocketChannel
* |--DatagramChannel
*
*三、获取通道
*1. Java 针对支持通道的类提供了getChannel()方法
* 本地IO操作
* FileInputStream/FileOutStream
* RandomAccessFile
*
* 网络IO:
* Socket
* ServerSocket
* DatagramSocket
*
*2.在 JDK 1.7 中的NIO.2针对各个通道提供了一个静态方法open()
*3.在 JDK 1.7 中的NIO.2的Files 工具类的newByteChannel()
*
*/