NIO(2):Channel
2024-10-20 07:55:36
Channel可以理解为铁轨,Buffer是铁轨上的火车。铁轨的两端连接这文件描述符或者说文件的缓冲区和程序运行时的内存。借助NIO是一种更加符合OS底层文件系统的调用方式,使用NIO可以用更小的开销实现IO服务。
Channel
Channel是一个接口,但是接口里的方法非常的少,只有和打开关闭有关的两个方法,诸如read write的方法并没有直接在Channel这个顶层接口定义。一些Channel的具体实现类通过多接口实现来具备不同种类的功能,如实现了ReadableByteChannel的接口具备了读字节的能力,实现了WritableByteChannel的接口具有了写字节的能力,那如果一个Channel对象既实现了ReadableByteChannel又实现了WriteableByteChannel,那么该接口就是一个双工通信的接口,这也是NIO相较于BIO高效的一个地方,当然双工通信的高效性仅仅局限在网络通信中,
public interface Channel extends Closeable {
public boolean isOpen();
public void close() throws IOException; }
Channel可以分为两类,文件Channel和网络SocketChannel。
打开Channel
文件Channel的获取是通过一个打开的Stream对象的getChannel方法返回,虽然返回的Channel对象既实现了Read接口也试下了Write接口,但由于Stream读或者写的,因而获得的Channel对象也是只能读或者只能写。即文件Channel的通信方式取决于底层文件句柄的访问方式。
而SocketChannel才是真正的双工通信Channel。
使用Channel
SocketChannel可以使用非阻塞式通信,在Socket上的IO操作要么立即完成,要么返回一个结果表明没有进行任何操作。
关闭Channel
//TO DO
最新文章
- 谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器
- c# 本周时间查询
- Intent(三)向下一个活动传递数据
- HTML5所有标签汇总按功能
- Python学习教程(learning Python)--3.1 Python的if分支语句
- 解决iOS设备屏幕切换时页面造成的问题
- Delphi 6 Web Services初步评估之二(转)
- C/C++经典面试题目
- HDU 4333 Revolving Digits 扩展KMP
- eclipse项目提交到git
- python多线程几种方法实现
- Servlet--取得初始化配置信息
- Android指南针之加速度传感器地磁传感器-android学习之旅(67)
- 软件工程通用软件体系结构主机终端模式、B/S 、C/S 结构和多层分布式结构
- 显存充足,但是却出现CUDA error:out of memory错误
- 【vue】中 $listeners 的使用方法
- cget cmake 包管理工具
- MEME(Motif-based sequence analysis tools)使用说明
- 静态构造器(static constructor)
- 彻底理解 Python 生成器