上篇文章中介绍了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. 设计模式 行为型 - 策略模式 Strategy

    策略模式(Strategy) 意图 对象有某个行为,但是在 不同的场景 下,该行为有 不同的实现算法. 就好比你去餐馆吃饭,首页你要通过菜单来选择你想吃的菜,根据你点的菜的不同,在厨房中去做不同的菜. ...

  2. MySQL数据库(三)--表相关操作(二)之约束条件、关联关系、复制表

    一.约束条件  1.何为约束 除了数据类型以外额外添加的约束 2.约束条件的作用 为了保证数据的合法性,完整性 3.主要的约束条件 NOT NULL # 标识该字段不能为空,默认NULL,可设置NOT ...

  3. JMETER 生成测试报告

    JMETER测试报告样例 JMETER 提供的生成测试报告功能,能够生成漂亮的HTML测试报告. 上图是测试统计图 20个用户并发,测试时长一分钟,发起流程320次,没有出错,TPS为6.5,平均发起 ...

  4. XGBoost 参数介绍

    XGBoost 的设置有三种参数:一般参数,提升参数和学习参数. 一般参数 取决于提升器,通常是树或线性模型提升参数 取决于选择的提升器的相关参数学习参数 取决于指定学习任务和相应的学习目标一般参数 ...

  5. windows平台上MongoDB安装配置

    我按照原文方法操作,无法连接mongod服务,可能哪里出了问题. 以下是小页的教程:https://www.cnblogs.com/littlepage/p/10992336.html  视频参考: ...

  6. PAT 乙级 1036.跟奥巴马一起编程 C++/Java

    题目来源 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏 ...

  7. boost与MFC的冲突(new)

    在MFC对话框程序中用boost::signals2时出现了问题, 由于MFC为了方便调试,在debug下重新定义了new #ifdef _DEBUG#define new DEBUG_NEW#end ...

  8. Mybatis-plus中不列出全部字段

    //不列出全部字段 @Test public void test10() { QueryWrapper<User> wrapper = new QueryWrapper<>() ...

  9. nginx访问限制

    nginx的访问控制 1.http_access_module   基于ip的访问控制 允许的访问配置 不允许的访问配置 server { listen 80; server_name localho ...

  10. Python 文件读写操作实例详解

    Python提供了必要的函数和方法进行默认情况下的文件基本操作.你可以用file对象做大部分的文件操作 一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前 ...