JAVA NIO简明教程 五 scatter/Gather

JAVA NIO简明教程 五 scatter/Gather

JAVA NIO 也支持scatter/gather(分散/聚合),分散/聚合是一个概念在读写通道的时候。

一个通道在读操作下能够写入到多个缓冲区的操作叫做分散。
多个缓冲区写入数据到一个通道的操作叫做聚合。

分散/聚合通常被用在当需要多个数据被分散的发送。例如一个消息包含消息头和消息体,你可能在不同的缓冲区里存放消息头,消息体。这样做使你在处理的时候能区分消息头和消息体。

scattering Reads

分散读操作能够读数据从一个通道到多个缓冲区。下面是图示例:

scatter

下面是代码示例,展示了scatter操作:

    ByteBuffer header = ByteBuffer.allocate(128);
    ByteBuffer body = ByteBuffer.allocate(1024);
    
    ByteBuffer [] bufferArray = {header, body};
    channel.read(bufferArray);

reader方法传入的是一个数组,通道通过reader方法写数据到数组中的缓冲区,当其中一个缓冲区被填满,通道将移动到数组中的下一个缓冲区继续写数据。

scattering当写满一个缓冲区后才会移动到下一个缓冲区,他不能动态的调整大小,意味着,上面的示例中缓冲区分配大小要和处理的消息头消息体大小是一样,否则处理是不尽人意。

Gathering writes

聚合写操作是读多个缓冲区的数据写入到通道,下图示例

gather

下面是代码示例,展示了如何做聚合处理

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body   = ByteBuffer.allocate(1024);

//write data into buffers

ByteBuffer[] bufferArray = { header, body };

channel.write(bufferArray);

和分散处理的很相像,不同的是这里使用的是通道的 write方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值