Java的NIO之通道channel详解
作者:不等风雨,只等你
这篇文章主要介绍了Java的NIO之通道channel详解,通道channel由java.nio.channels 包定义的,Channel 表示IO源与目标打开的连接,Channel类类似于传统的"流",只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互,需要的朋友可以参考下
通道(channel)
通道(channel):由java.nio.channels 包定义的。
Channel 表示IO源与目标打开的连接。
Channel类类似于传统的“流”。只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互。
jvm数据传输的发展
第一阶段:由CPU直接处理和管理IO接口并进行数据传输。
第二阶段:引入寄存器DMA(流的概念引入),在需要使用IO操作的时候,由寄存器DMA向CPU申请,然后再由寄存器统一管理IO接口,实现数据传输。
第三阶段:寄存器DMA换成通道Channel,通道独立开来不由CPU管,也不需要申请权限,只有由其对IO接口进行处理和管理,然后实现数据传输。
Java为Channel接口提供的最主要实现类如下:
- FileChannel : 用于读取、写入、映射和操作文件的通道
- DatagramChannel : 通过 UDP 读写网络中的数据通道。
- SocketChannel : 通过 TCP 读写网络中的数据。
- ServerSocketChannel : 可以监听新进来的 TCP 连接,对每一个新来进来的连接都会创建一个 SocketChannel。
获取通道
获取通道的一种方式是对支持通道的对象调用getChannel() 方法。支持通道的类如下:
- FileIputStream
- FileOutputStream
- RandomAccessFile
- DatagramSocket
- Socket
- ServerSocket 获取通道的其他方式是使用 Files 类的静态方法 newByteChannel()获取字节通道。或者通过通道的静态方法open() 打开并返回指定通道。
FileChannel的常用方法
到此这篇关于Java的NIO之通道channel详解的文章就介绍到这了,更多相关Java通道channel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!