【JAVA】【NIO】5、Java NIO Scatter / Gather

标题的意思是Java NIO的分散集中
Java NIO带有内置的分散收集的支持。分散收集的概念主要用于通道的读写。
对一个通道的分散读取就是将数据读到多个buffer中,因此,通道将数据分散到多个buffer中。
对一个通道的集中写就是将数据从多个buffer中写到一个通道中,因此,通道从多个buffer将数据收集到一个通道中。
分散收集经常用于对传输数据分开处理的场景。比如,一条消息由header和body构成,你需要将header和body保存在不同的buffer中。这样做就是的对header和body分开处理更加简单了。

分散读取

这里写图片描述
看一个例子:
这里写图片描述
注意buffer是如何插入到数组中的,以及数组作为参数传递给了channel.read方法。read方法从channel中取出数据,按照buffer数组中buffer的顺序将数据写入,一个满了,就会顺序写到下一个buffer中。
事实上,分散读取在移动到下一个buffer前会先填充满一个buffer,意味着这种方式不适合消息大小动态变化的情况。换言之,如果你有一个header和body,然后header是固定大小的(比如:128字节),这种情况,分散读取就能发挥的很好。

集中写

这里写图片描述
这里写图片描述

注意:Buffer的flip方法调用

buffer数组作为参数传递给write方法,将buffer的内容按照顺序写入通道。仅仅处于position和limit之间的数据才会写入。
因此,如果一个buffer有128字节的容量,但是只有58字节的内容,那么只有58字节会写入通道中。所以,和分散读取相比,集中写对于消息大小不固定的处理会更好。

下一节:【JAVA】【NIO】6、Java NIO Channel to Channel Transfers

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值