前言

前两篇文章介绍了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

Channel概述的更多相关文章

  1. go channel 概述 - 管道

    概述 unix/linux OS 的一个进程的输出可以是另一个进程的输入,这些进程使用stdin与stdout设备作为通道,在进程之间传递数据. 同样的,GO中有io.Reader与io.Writer ...

  2. go channel 概述

    精髓 将资源读进内存-->共享内存,一个个进程/线程进行处理,这是常见模式.go channel 是一种直接在进程/线程之间传递资源的方式,即以通信来共享内存.这便是go的精髓. 扩展-一些名词 ...

  3. Channel延续篇

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

  4. 详解 通道 (Channel 接口)

    在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...

  5. NIO(二):Channel通道

    一.Channel概述 channel(通道):进行IO的连接通道,为NIO的几个核心(Buffer,selector,channel)之一,相比于IO的stream具有较高的性能. IO 单向传输 ...

  6. NIO类库

    NIO概述 从JDK1.4开始,引入了新的I/O类库,它们位于java.nio包中,其目的在于提高I/O的操作效率.nio是new io的缩写. 参考文章:NIO BIO AIO区别 java.nio ...

  7. SocketChannel简述

    前言 在前面的Channel概述的分类中提到过SocketChannel主要是用来基于TCP通信的通道.这篇文章详细介绍下SocketChannel SocketChannel是什么 SocketCh ...

  8. Java:NIO 学习笔记-3

    Java:NIO 学习笔记-3 根据 黑马程序员 的课程 JAVA通信架构I/O模式,做了相应的笔记 3. JAVA NIO 深入剖析 在讲解利用 NIO 实现通信架构之前,我们需要先来了解一下 NI ...

  9. GO 总章

    GO 学习资源 go 代理 GO 语言结构 GO 数字运算 GO 时间处理 GO 定时器 GO 异常处理 go recover让崩溃的程序继续执行 GO Exit Fatal panic GO 通过进 ...

随机推荐

  1. Oracle 11.2.0.4单实例打补丁

    Oracle 11.2.0.4单实例打PSU,OJVM PSU补丁快速参考 写在前面: ·         1.Oracel打每个补丁的操作有时存在差异,所以不管多熟悉,都应该在打任何补丁之前阅读新补 ...

  2. 浅析Volatile关键字

    浅析Volatile关键字 在java中线程并发中,线程之间通信方式分为两种:共享内存和消息传递.共享内存指的是多个线程之间共享内存的属性状态:消息传递指的是线程之间发送信息来通信.在介绍volati ...

  3. 视频合并时使用python批量修改文件名

    不知道大家有没有遇到这样的情况,比如视频合并时文件名没有按照正常顺序排列,像这样 可见,文件名排序是乱的.这个样子合并出来的视频一定也是乱的.所以得想办法把文件名修改一下,让软件读取出正确的顺序.闲话 ...

  4. 洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)

    题目链接:https://www.luogu.org/problem/P2463 [题意] 求出N个串中都出现的相同子串的最长长度,相同子串的定义如题:所有元素加上一个数变成另一个,则这两个串相同,可 ...

  5. 块 /宏块(MB)/片(Slice/片组/图像(picture) 对应关系

    根据包含关系从大到小顺序排列   序列(GOP)-> 帧(I/IDR/P/B)-> 片组 -> 片(slice)-> 宏块(Block)-> 块(Macro  Block ...

  6. 织梦dedecms后台文件media_add.php任意上传漏洞解决办法

    织梦在安装到阿里云服务器后阿里云后台会提示media_add.php后台文件任意上传漏洞,引起的文件是后台管理目录下的media_add.php文件,下面跟大家分享一下这个漏洞的修复方法: 首先找到并 ...

  7. phpcms添加https后台分页错误的解决方法

    今天修改一位客户的phpcms网站,他要求添加https,这对ytkah来说是轻车熟路了,但是后台稍微有点问题,点击分页出现错误,将鼠标移到下一页显示的链接是https://www.abc.com/w ...

  8. 配置本地 yum 仓库

    配置本地 yum 仓库 # yum 官网 http://yum.baseurl.org/ # yum 手册页 man yum man yum.conf SEE ALSO pkcon (1) yum.c ...

  9. Mac 键盘符号说明

    Mac 键盘符号说明 ⌘ == Command ⇧ == Shift ⇪ == Caps Lock ⌥ == Option ⌃ == Control ↩ == Return/Enter ⌫ == De ...

  10. Python并发编程之进程通信

    ''' 进程间的通信 ''' """ multiprocessing模块支持进程间通信的两种主要形式:管道和队列 都是基于消息传递实现的, ""&qu ...