Java NIO之四 通道(channel)

版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/89281467

通道(channel)

  1. 通道(channel):由java.nio.channels 包定义的。Channel 表示IO源与目标打开的连接。Channel类类似于传统的“流”。只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。

jvm数据传输的发展

  1. 第一阶段:由CPU直接处理和管理IO接口并进行数据传输。
    在这里插入图片描述
  2. 第二阶段:引入寄存器DMA(流的概念引入),在需要使用IO操作的时候,由寄存器DMA向CPU申请,然后再由寄存器统一管理IO接口,实现数据传输。
    在这里插入图片描述
  3. 第三阶段:寄存器DMA换成通道Channel,通道独立开来不由CPU管,也不需要申请权限,只有由其对IO接口进行处理和管理,然后实现数据传输。
    在这里插入图片描述

Channel主要实现类

  1. Java为Channel接口提供的最主要实现类如下
    1. FileChannel : 用于读取、写入、映射和操作文件的通道
    2. DatagramChannel : 通过 UDP 读写网络中的数据通道。
    3. SocketChannel : 通过 TCP 读写网络中的数据。
    4. ServerSocketChannel : 可以监听新进来的 TCP 连接,对每一个新来进来的连接都会创建一个 SocketChannel。

获取通道

  1. 获取通道的一种方式是对支持通道的对象调用getChannel() 方法。支持通道的类如下:
    1. FileIputStream
    2. FileOutputStream
    3. RandomAccessFile
    4. DatagramSocket
    5. Socket
    6. 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()
 *
 */

猜你喜欢

转载自blog.csdn.net/qq_34626097/article/details/89281467