上篇文章中介绍了NIO中的Channel,从Channel是什么、特性、分类几个方面做了下简单的介绍。但是后面Channel的分类,个人感觉不够全面,容易误导读者,特此以这篇文章加以补充。

Channel概览

这里我们直奔主题,先通过概览性的UML类图总体直观性的感受下Channel

接下来分析下这个UML图。从层次,具体的接口和实现类方面介绍。

一.层次

对于NIO的Channel的模块,Java的设计者们还是用心良苦。层次突出,接口行为的划分精细,职责单一而清晰。

从图中不难看出,Channel主要被分为四层:

  1. Channel顶层接口
  2. 根据不同能力划分通道:可读通道、可写通道、网络型通道、异步、可中断
  3. 基于以上的读写和网络上的能力继续进行分层:聚集(write的内聚)、分散(read的拆分)、可选择性(用于Selector多路复用)
  4. 各种具体用途的Channel的实现

二.接口和实现

1.第一层
  • Channel:作为NIO中通道的最顶层接口,抽象的定义描述了通道的概念,通道可以打开可以关闭的行为
2.第二层
  • ReadableByteChannel:代表具有读能力的通道,描述了通道的可读行为,只要具有可读能力的通道都应该实现它
  • WriteableByteChannel:代表具有写能力的通道,描述了通道的可写行为,只要具有可写能力的通道都应该实现它
  • NetworkChannel:代表网络类型的通道,只要连接到Socket套接字,都需要实现它
  • AsynchronousChannel:代表具有异步I/O操作能力的通道,只是定义了通道异步关闭的行为,具有异步读写能力的通道都应该实现它
  • InterruptibleChannel:代表可中断式通道,即一个线程阻塞在该通道的I/O上,另一个线程可以关闭通道中断阻塞在该通道上的线程
3.第三层
  • SeekableByteChannel:可查找的通道,内部维护位置position,通过位置的切换,实现自由读写
  • ScatteringByteChannel:具有分散能力的通道,即从通道中读取数据至多个Buffer缓冲区的能力
  • GatheringByteChannel:具有聚集能力的通道,即从多个顺序的Buffer缓冲区中写数据至通道的能力
4.第四层

该层就是具有实际能力的通道,直接与Java应用开发者相关的,应用中直接使用的API。

这里就不再赘述,可移步至我的上篇文章Channel概述,该篇博文中介绍了第四层的相关用途的通道。

本文主要就是为了补充上篇文章,让读者能够对NIO中Channel部分能够有个全局性的认识。后续会详细介绍第四层通道的用途及用法。

Channel延续篇的更多相关文章

  1. 快学Java NIO 续篇

    可以先看Java NIO的整体介绍,这篇接着说以下内容,<快学Java NIO>续篇 FileChannel SocketChannel ServerSocketChannel Java ...

  2. RMAN备份策略与异机恢复一例(续篇)

    本文是<RMAN备份策略与异机恢复一例>的续篇,继续实验验证,最终实现两个需求: 1.异机恢复临时测试的小库 2.传输归档时,实现增量传输 1.异机恢复临时测试的小库 之前异机恢复的需求已 ...

  3. [转帖]go 的goroutine 以及 channel 的简介.

    进程,线程的概念在操作系统的书上已经有详细的介绍.进程是内存资源管理和cpu调度的执行单元.为了有效利用多核处理器的优势,将进程进一步细分,允许一个进程里存在多个线程,这多个线程还是共享同一片内存空间 ...

  4. 【MetaPruning】2019-ICCV-MetaPruning Meta Learning for Automatic Neural Network Channel Pruning-论文阅读

    MetaPruning 2019-ICCV-MetaPruning Meta Learning for Automatic Neural Network Channel Pruning Zechun ...

  5. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  6. TODO:Go语言goroutine和channel使用

    TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语言运行时(runtime)管理.使用的时候在函数前面加"go"这个 ...

  7. GO语言之channel

    前言: 初识go语言不到半年,我是一次偶然的机会认识了golang这门语言,看到他简洁的语法风格和强大的语言特性,瞬间有了学习他的兴趣.我是很看好go这样的语言的,一方面因为他有谷歌主推,另一方面他确 ...

  8. Critical: Update Your Windows Secure Channel (cve-2014-6321,MS14-066)

    前言:风雨欲来山满楼,下半年开始各种凶猛的漏洞层出不穷,天下已经不太平,互联网已经进入一个新的台阶 0x01 cve-2014-6321 11月的补丁月,微软请windows的用户吃了顿大餐,发布了1 ...

  9. JAVA NIO Channel

    Basic:   多数通道都是链接到开发的文件描述符的.Channel类提供维持平台独立性的抽象过程.   通道是一种途径,访问和操作操作系统,缓冲区是数据操作点: Channel类继承结构图: 通过 ...

随机推荐

  1. Github标星过万,Python新手100天学习计划。

    大数据文摘编辑部出品 作为目前最火也是最实用的编程语言,Python不仅是新手入门程序界的首选,也逐渐成为了从大厂到小厂,招牌需求list的必要一条. 当然,学Python这件事情,你可能也和文摘菌一 ...

  2. Spring Boot集成Druid数据库连接池

    1. 前言 Druid数据库连接池由阿里巴巴开源,号称是java语言中最好的数据库连接池,是为监控而生的.Druid的官方地址是:https://github.com/alibaba/druid 通过 ...

  3. 团队项目-Beta冲刺及发布说明

    请大家在每次作业开头添加格式描述: 这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 <写上团队名称>(附上团队博客链接) 这 ...

  4. Python 模块A

    模块的四种形式 自定义模块,例如自己定义的common.py就叫common模块 内置模块:python解释器自带的,不需要安装 第三方模块:需要自己安装,13万个库,无所不能,写库(弄得更简单) 包 ...

  5. 达信:深度解读COSO新版企业风险管理框架(ERM)

    http://www.sohu.com/a/124375769_489979 2016年6月,美国反欺诈财务报告委员会(The Committee of Sponsoring Organization ...

  6. .Net反射-基础2-BindingFlags参数

    BindingFlags参数用于指定反射查找的范围在调用下列方法时会用到BindingFlags参数 // 调用方法. InvokeMethod // 创建实例. CreateInstance // ...

  7. jquery保存cookie,php读取cookie操作

    //保存时间 var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days*24*60*60*1000); //保存内容, ...

  8. Utterance-level Aggregation for Speaker Recognition in The Wild

    文章[1]主要针对的是语句长度不定,含有不相关信号的说话人识别. 深度网络设计的关键在于主干(帧级)网络的类型[the type of trunk (frame level) network]和有时间 ...

  9. [考试]NOIP2015模拟题2

    // 此博文为迁移而来,写于2015年7月22日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w72i.html 1.总 ...

  10. BST | 1043 BST树与镜像BST树的判断

    较为简单.小于大于的都走一遍就可以AC了 #include <stdio.h> #include <memory.h> #include <math.h> #inc ...