NIO(2):Channel

本文介绍了NIO中Channel的相关知识。Channel可理解为铁轨,借助NIO开销更小。它是接口,具体实现类通过多接口实现具备不同功能。Channel分文件Channel和网络SocketChannel,文件Channel通信取决于底层文件句柄,SocketChannel是双工通信且可非阻塞式通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值