Java NIO 教程(五)Scatter/Gather

一. Scatter/Gather概述

  1. 作用: 描述从Channel中读取或者写入到Channel的操作
  2. 定义:
    1. Scatter(分散):将Channel数据读入buffer的时候,Channel将其中的数据分散(Scatter)到多个buffer中
    2. Gather(聚集):将buffer数据写入Channel的时候,Channel将多个buffer数据聚集(Gather)后发送给Channel
  3. 何时用?
    1. 用于需要将传输的数据分开处理的场合,例如传输一个由消息头和消息体组成的消息,你可能会将消息体和消息头分散到不同的buffer中,这样你可以方便的处理消息头和消息体。

 


二. 用法

  1. Scattering Reads
    1. 步骤:
      1. 将buffer插入数组
      2. 将数组传入channel.read()方法中
    2. 注意:
      1. 当一个buffer被写满之后,channel紧接着向另一个buffer中写(必须先把上一个填满,才会往后写)
      2. Scattering Reads不适用于动态消息(消息大小不固定)由于buffer必须把上一个填满才向下一个写
    3. 实现:
      ByteBuffer header = ByteBuffer.allocate(128);
      
      ByteBuffer body   = ByteBuffer.allocate(1024);
      
      
      
      ByteBuffer[] bufferArray = { header, body };
      
      channel.read(bufferArray);

       

  2. Gathering Writes
    1. 步骤:同上
    2. 注意:
      1. channel.write()方法会按照buffer在数组的顺序,将数据写入channel
      2. 只有position和limit之间的数据才会被写入。也就是buffer的剩余数据,不是buffer中所有数据
      3. Gathering Writes 很适合处理动态消息
    3. 实现:
      ByteBuffer header = ByteBuffer.allocate(128);
      
      ByteBuffer body   = ByteBuffer.allocate(1024);
      
      
      
      //省略将数据写入buffer的方法
      
      
      
      ByteBuffer[] bufferArray = { header, body };
      
      
      
      channel.write(bufferArray);

       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值