上篇文章中介绍了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部分能够有个全局性的认识。后续会详细介绍第四层通道的用途及用法。

最新文章

  1. poj3009
  2. BZOJ 3505
  3. PHP漏洞全解(八)-HTTP响应拆分
  4. SRM 405(1-250pt, 1-500pt)
  5. Python开发【第八篇】:网络编程
  6. DevExpress ASP.NET 使用经验谈(7)-ASPxTreeList控件使用
  7. LCD显示--Ht1621b芯片显示屏驱动
  8. Gulp.js简介
  9. P3377
  10. Scikit-learn:模型评估Model evaluation
  11. 如何使用$.each()与$().each()以及他们的区别
  12. C# List<T>排序
  13. PyCharm 在PyCharm中使用GitHub
  14. 【分布式系列】session跨域及单点登录解决方案
  15. 来自于一个问题的回答对自己的反思 php怎么发送邮件?发送邮件插件PHPMailer
  16. AngularJS中有关Directive的汇总
  17. MTP 写字机器
  18. Hive启动异常
  19. Android平台上优秀的开源项目
  20. Shell脚本传递带有空格的参数[摘录自网络]

热门文章

  1. Spark GraphX图计算核心源码分析【图构建器、顶点、边】
  2. Centos7 安装配置 Rabbitmq Cluster
  3. Maven打包时出现“Show Console View”错误弹出框,错误详情为“An internal error has occurred. java.lang.NullPointerException”的解决方法
  4. MATLAB之心形图绘制
  5. recon-ng打开后显示No modules enabled/installed
  6. windows下apache + mod_wsgi + python部署flask接口服务
  7. 04-C#笔记-数据类型转化
  8. vue大文件上传组件选哪个好?
  9. Python面向对象 | 双下方法
  10. 踩iviewui中Tabs 标签页数据绑定坑