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 通过进 ...
随机推荐
- HubSpot company数据在UI上的展示和通过API方式进行获取
在网页查看所有的company: https://app.hubspot.com/contacts/6798828/companies/list/view/all/? 打开第一个名为SAP的compa ...
- guava布隆过滤器
pom引入依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava&l ...
- 小样本学习(few-shot learning)在文本分类中的应用
1,概述 目前有效的文本分类方法都是建立在具有大量的标签数据下的有监督学习,例如常见的textcnn,textrnn等,但是在很多场景下的文本分类是无法提供这么多训练数据的,比如对话场景下的意图识别, ...
- nginx访问限制
nginx的访问控制 1.http_access_module 基于ip的访问控制 允许的访问配置 不允许的访问配置 server { listen 80; server_name localho ...
- eclipse IDE for java developers下载与安装
1.进入eclipse官网下载页面 https://www.eclipse.org/downloads/ 2.点击Download Packages 3.windows 用户 选择 64 bits 4 ...
- SDN Reading Notes
网络操作编程语言:Frenetic QoS策略实施框架:PolicyCop
- 【redis】设置密码
1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redis,如果没有开启redis则需要先开启:[root@iZ94jz ...
- ESA2GJK1DH1K基础篇: 阿里云物联网平台: 云平台显示单片机采集的温湿度数据,控制设备继电器(基于GPRS模块,AT指令TCP_MQTT通信)
实现的功能 上一节是使用的Wi-Fi模块连接的阿里云平台,这节呢咱用GPRS连接. 阿里云的设备配置还是按照上一节的,有个温度,有个湿度. 测试 一,打开单片机程序 二,根据自己的修改,然后下载进去单 ...
- SFTP 文件上传下载工具类
SFTPUtils.java import com.jcraft.jsch.*; import com.jcraft.jsch.ChannelSftp.LsEntry; import lombok.e ...
- Python 的AES加密与解密
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...