前言

前两篇文章介绍了NIO核心部分部分之一的缓冲区的相关内容,接下来我们继续学习NIO中另一个重要的核心部分——Channel(通道)。
在学习这篇文章之前,先做下简单的说明,本文是一篇关于通道的概述文章,不对每种通道的细节特性做过多的叙述,只是让读者从宏观的角度对通道有个认识。

  • 什么是Channel
  • NIO中的Channel种类

一.Channel

Channels of various types, which represent connections to entities capable of performing I/O operations;

java docs中是这样描述Channel,各种类型的Channel都代表着能连接到执行I/O操作的实体,比如:连接硬件设施(打印机)、文件、网络套接字等。

有点类似流,但是Channel具有以下特性:

  1. 面向数据块的读写方式,即数据从Buffer读后写到Channel中或者从Channel中读后写到Buffer中。面向流的读写都是单个字节的读写方式
  2. Channel是双向的,一个打开的Channel既可以读也可以写。面向流的读写,是单向的
  3. Channel中有些类型的读写是有阻塞和非阻塞模式。流的读写是阻塞式
  4. Channel是线程安全的

下图展示了Channel和Buffer之间的数据流向,直观性的表述下读写、双向特点:

java nio包中对于Channel的表述,是以Channel接口作为Channel最上层接口抽象,UML类图如下:

  • isOpen:可以用来判断Channel是否打开
  • close:关闭Channel(有时需要关闭,回收释放资源)

二.种类

上节中讲述了Channel的基本概念,并Java docs中描述Channel是连接到I/O操作的实体。
接下来就跟根据将Channel连接到不同的地方执行I/O操作将Channel做下简单的分类(Java SE 7)。

  • FileChannel:文件通道,连接到文件以进行文件的I/O(这里不做详细叙述)
  • SocketChannel:基于TCP可靠连接的道道,连接到套接字
  • DataGramChannel:基于UDP的通道
  • ServerSocketChannel:监听套接字的可选择通道

java nio中有以上几种常用的Channel,是基于TCP、UDP、文件的I/O操作的API。

SocketChannel和ServerSocketChannel拥有两种读写模式:阻塞和非阻塞模式。具体的详情后续文章会介绍,这里只做宏观的了解Channel

最新文章

  1. ios设备中openGL所支持的最大纹理尺寸
  2. PHP基础OOP(一)
  3. WPF中获得控件相对于控件的相对位置
  4. HDU3345广搜 (P,E,T,#)
  5. JavaScript对下一个元旦倒计时,经常用于网店限时销售
  6. 查找进程对应的PID和对应的端口号
  7. js中的call及apply的运用
  8. Fire Net
  9. Openwrt上使用dnsmasq和ipset实现域名分流
  10. JAVA_SE基础——43.抽象类
  11. AssertJ
  12. BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路
  13. Basic Linux Privilege Escalation
  14. 16 道嵌入式C语言面试题
  15. iOS CATransition 动画的简单使用
  16. nfs文件共享服务
  17. 【洛谷p1403 】【AHOI2005】约数研究
  18. [Android] 锁定屏幕
  19. idea 2017破解方法
  20. angular.extend深拷贝(deep copy)

热门文章

  1. Idea中Spring整合MyBatis框架中配置文件中对象注入问题解决方案
  2. hadoop hdfs 有内网、公网ip后,本地调试访问不了集群解决
  3. 盛科(Centec)交换机 SmartConfig 特性
  4. VUE-X 的传值使用
  5. org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next tok
  6. 重新学习Spring注解——servlet3.0
  7. 洛谷p3916图的遍历题解
  8. 【DP】【P5615】 [MtOI2019] 时间跳跃
  9. 为什么mysql事务回滚后,自增ID依然自增
  10. 每日一问:Android 中内存泄漏都有哪些注意点?