Channel概述
前言
前两篇文章介绍了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具有以下特性:
- 面向数据块的读写方式,即数据从Buffer读后写到Channel中或者从Channel中读后写到Buffer中。面向流的读写都是单个字节的读写方式
- Channel是双向的,一个打开的Channel既可以读也可以写。面向流的读写,是单向的
- Channel中有些类型的读写是有阻塞和非阻塞模式。流的读写是阻塞式
- 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概述的更多相关文章
- go channel 概述 - 管道
概述 unix/linux OS 的一个进程的输出可以是另一个进程的输入,这些进程使用stdin与stdout设备作为通道,在进程之间传递数据. 同样的,GO中有io.Reader与io.Writer ...
- go channel 概述
精髓 将资源读进内存-->共享内存,一个个进程/线程进行处理,这是常见模式.go channel 是一种直接在进程/线程之间传递资源的方式,即以通信来共享内存.这便是go的精髓. 扩展-一些名词 ...
- Channel延续篇
上篇文章中介绍了NIO中的Channel,从Channel是什么.特性.分类几个方面做了下简单的介绍.但是后面Channel的分类,个人感觉不够全面,容易误导读者,特此以这篇文章加以补充. Chann ...
- 详解 通道 (Channel 接口)
在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...
- NIO(二):Channel通道
一.Channel概述 channel(通道):进行IO的连接通道,为NIO的几个核心(Buffer,selector,channel)之一,相比于IO的stream具有较高的性能. IO 单向传输 ...
- NIO类库
NIO概述 从JDK1.4开始,引入了新的I/O类库,它们位于java.nio包中,其目的在于提高I/O的操作效率.nio是new io的缩写. 参考文章:NIO BIO AIO区别 java.nio ...
- SocketChannel简述
前言 在前面的Channel概述的分类中提到过SocketChannel主要是用来基于TCP通信的通道.这篇文章详细介绍下SocketChannel SocketChannel是什么 SocketCh ...
- Java:NIO 学习笔记-3
Java:NIO 学习笔记-3 根据 黑马程序员 的课程 JAVA通信架构I/O模式,做了相应的笔记 3. JAVA NIO 深入剖析 在讲解利用 NIO 实现通信架构之前,我们需要先来了解一下 NI ...
- GO 总章
GO 学习资源 go 代理 GO 语言结构 GO 数字运算 GO 时间处理 GO 定时器 GO 异常处理 go recover让崩溃的程序继续执行 GO Exit Fatal panic GO 通过进 ...
随机推荐
- Markdown随笔
Markdown随笔 这两天兴致来了,想尝试一下使用 Markdown. 写这篇博客时我用的是: MarkdownPad 2 关于 MarkdownPad 2 的安装破解网上有很多教程了,这里我就不赘 ...
- 将积累多年的java学习资料,pdf文档给大家分享一下,比如《大话设计模式》《算法》《Linux私房菜》等等
话不多说,资料目录如下,需要的拿走,下载的同时别忘了点下推荐. 需要的点下面链接,到小编网盘进行下载: 2-大话设计模式.pdf 链接:https://pan.baidu.com/s/1b05puNO ...
- C语言 严蔚敏数据结构 线性表之链表实现
博主最近在考成都大学皇家计算机科学与技术专业,复习专业课数据结构,正好学习到线性结构中的线性表用链表这种存储结构来实现. 首先,数据结构包括1.数据的操作2.逻辑结构3.存储结构(数据结构三要素. 直 ...
- AMD SATA Download (解决win10 磁盘占用100%问题)
需要下载的AMD SATA 驱动: 下载AMD SATA https://github.com/StoneIsDeveloper/UsefulTools/blob/master/AMD%20SATA/ ...
- LOJ 3160: 「NOI2019」斗主地
题目传送门:LOJ #3160. 简要题意: 有一个长度为 \(n\) 的序列 \(a\),初始时 \(a_i=i\) 或 \(a_i=i^2\),这取决于 \(\mathrm{type}\) 的值. ...
- angular 小技术点
angular 标签 ng-options ng-model ng-checked ng-true-value ng-false-value ng-if ng-src delete $location ...
- 洛谷P3835 【模板】可持久化平衡树(FHQ Treap)
题面 传送门 题解 可持久化一下就好了,具体可以看代码 这里有一个小\(trick\)就是我们原本在\(merge\)的时候也要新建节点的,但是我们\(merge\)之前一般已经\(split\)过了 ...
- priority_queue(优先队列)使用方法
priority_queue默认是一个大根堆: 并且出队方式与普通队列queue的front不一样,是top . 如果想用小根堆,可以修改定义时的参数: priority_queue<int,v ...
- day 16
Weep no more, no sigh, nor groan. Sorrow calls no time that's gone. 别哭泣,别叹息,别呻吟:悲伤唤不回流逝的时光.
- 【BigData】Java基础_HashMap
HashMap简介 HashMap是一种非常常见.方便和有用的集合,是一种键值对(K-V)形式的存储结构 常见的方法如下: put:将数据添加到集合中 get:获取集合中的元素 size:获取集合的长 ...