Java的NIO之通道channel详解

 更新时间:2023年10月24日 10:06:28   作者:不等风雨,只等你  
这篇文章主要介绍了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接口提供的最主要实现类如下:

  1. FileChannel : 用于读取、写入、映射和操作文件的通道
  2. DatagramChannel : 通过 UDP 读写网络中的数据通道。
  3. SocketChannel : 通过 TCP 读写网络中的数据。
  4. ServerSocketChannel : 可以监听新进来的 TCP 连接,对每一个新来进来的连接都会创建一个 SocketChannel。

获取通道

获取通道的一种方式是对支持通道的对象调用getChannel() 方法。支持通道的类如下:

  1. FileIputStream
  2. FileOutputStream
  3. RandomAccessFile
  4. DatagramSocket
  5. Socket
  6. ServerSocket 获取通道的其他方式是使用 Files 类的静态方法 newByteChannel()获取字节通道。或者通过通道的静态方法open() 打开并返回指定通道。

FileChannel的常用方法

在这里插入图片描述

到此这篇关于Java的NIO之通道channel详解的文章就介绍到这了,更多相关Java通道channel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • RocketMQ producer发送者浅析

    RocketMQ producer发送者浅析

    RocketMQ生产者是一种高性能、可靠的消息发送者,能够将消息快速、可靠地发送到RocketMQ消息队列中。它具有多种消息发送模式和消息发送方式,可以根据不同的业务需求进行灵活配置
    2023-04-04
  • Java中定时任务的6种实现方式

    Java中定时任务的6种实现方式

    这篇文章主要给大家分享的是Java中定时任务的6种实现方式,几乎在所有的项目中,定时任务的使用都是不可或缺的,如果使用不当甚至会造成资损,下面文章我们就来看看Java中定时任务的具体使用方式吧
    2021-10-10
  • Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务)

    Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务)

    这篇文章主要介绍了Quartz定时任务管理方式(动态添加、停止、恢复、删除定时任务),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java的IO流实现文件和文件夹的复制

    Java的IO流实现文件和文件夹的复制

    这篇文章主要为大家详细介绍了Java的IO流实现文件和文件夹的复制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Java中JSON字符串反序列化(动态泛型)

    Java中JSON字符串反序列化(动态泛型)

    文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导致内存溢出(OOM),这篇文章主要介绍了JSON字符串反序列化 动态泛型,需要的朋友可以参考下
    2024-12-12
  • 使用Maven搭建Hadoop开发环境

    使用Maven搭建Hadoop开发环境

    这篇文章主要介绍了使用Maven搭建Hadoop开发环境的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • RabbitMQ从入门到原理再到实战应用

    RabbitMQ从入门到原理再到实战应用

    本文详细介绍了RabbitMQ的背景、单机部署、核心原理、高级特性和性能调优,通过理论与实践相结合,帮助读者全面掌握RabbitMQ的使用与应用,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • Java多线程中不同条件下编写生产消费者模型方法介绍

    Java多线程中不同条件下编写生产消费者模型方法介绍

    这篇文章主要介绍了Java多线程中不同条件下编写生产消费者模型方法介绍,介绍了生产消费者模型,然后分享了相关代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 详解context root修改无效web修改项目路径(eclipse)

    详解context root修改无效web修改项目路径(eclipse)

    这篇文章主要介绍了详解context root修改无效web修改项目路径(eclipse)的相关资料,需要的朋友可以参考下
    2017-04-04
  • java模拟斗地主发牌功能

    java模拟斗地主发牌功能

    这篇文章主要为大家详细介绍了java模拟斗地主发牌,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10

最新评论