博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NIO(2):Channel
阅读量:4351 次
发布时间:2019-06-07

本文共 929 字,大约阅读时间需要 3 分钟。

  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

转载于:https://www.cnblogs.com/AshOfTime/p/10896324.html

你可能感兴趣的文章
vcastr3.swf免费开源android可用的FLV播放器使用详解
查看>>
关情纸尾-----UIKit基础-UITableView
查看>>
python之反射
查看>>
公共类
查看>>
linux系统常用命令
查看>>
python实现购物车程序
查看>>
微信小程序UI------实现携程首页顶部的界面(弹性布局)
查看>>
Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
查看>>
centos 由2.7 升级为3.7
查看>>
Vim使用手册
查看>>
Leetcode 30.与所有单词相关联的子串
查看>>
【转】 java中HashMap详解
查看>>
linux 进程 进程组 作业 会话 控制终端
查看>>
缺陷描述是这样提高的
查看>>
UVA 1442 Cav
查看>>
网络爬虫作业
查看>>
java语言的科学与艺术-编程练习10.4(改进)
查看>>
WebServices介绍
查看>>
Oracle查询语句中指定索引时优化器及指定索引不好使的处理方法
查看>>
webpack2.0 基本使用
查看>>