三、Channel 通道

18 篇文章 1 订阅

Channel 通道

顾名思义,channel在NIO中扮演着通道的角色,负责传输缓冲区Buffer中的数据块。
打个比方,如果说Buffer是码头的话,码头中的一个个集装箱,就是存放在Buffer中的数据块,channel就是航道,运输这些集装箱,就需要走我们的航道,将集装箱送到目的地的码头,具体去哪个码头取集装箱,是由航道决定的,这条航道通往哪里,你就去哪个码头。
所以,我们获取集装箱(数据块)是去找码头(Buffer),找码头(Buffer)之前,我先需要通过航道(Channel)把数据块读入运入(读入)码头。

private ByteBuffer receiveBuffer = ByteBuffer.allocate(1024);
.
.
.
channel.read(receiveBuffer);

通过上面这个例子,可以引申出channel的一个特性:
• >对Channel的读写必须通过buffer对象
除此之外
• >Channel是双向的,可以读也可以写
//将缓冲区buffer写入通道

channel.write(sendBuffer);

最后就是,NIO既然是异步非阻塞的,channel自然也具有下面这个特征:
>Channel可以进行异步非阻塞的读写
当然,这一点需要我们手动设置

channel.configureBlocking(false);

有些类型的Channel必须设置成异步非阻塞模式,否则无法进行异步的IO工作,比如SocketChannel和ServerSocketChannel。但也有类型不具备异步,就像FileChannel。
常用的Channel类型有:
• FileChannel:从文件读取数据的
• DatagramChannel:读写UDP网络协议数据
• SocketChannel:读写TCP网络协议数据
• ServerSocketChannel:可以监听TCP连接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值