Java NIO Scatter/Gather(五)

原文链接:http://tutorials.jenkov.com/java-nio/scatter-gather.html,如有侵权,立删

Java NIO Scatter/Gather

  • Scattering Reads
  • Gathering Writes 

  Java NIO引入了 Scatter 和 Gather,这两个概念使用于向channel写入数据和从channel读取数据用的。

  scattering是和读操作有关的,channel将数据读取到多个buffer中去,channel分散数据到多个buffer中。

  gathering是个写操作有关的,将多个buffer中的数据写入到channel中去。

  scattering和gathering是非常有用的,在一些情形下。例如你需要传输不同的数据模块。

 scattering Reads

  一个scattering read从单个channel中读取数据到多个buffer中。上图

                        

1 ByteBuffer header = ByteBuffer.allocate(128);
2 ByteBuffer body   = ByteBuffer.allocate(1024);
3 
4 ByteBuffer[] bufferArray = { header, body };
5 
6 channel.read(bufferArray);

  要想向第二个buffer中写入数据,只能把第一个buffer写满。所以scattering read不适合动态数据,适合固定的数据大小的写入。

 Gathering Writes 

  上图

                        

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

//write data into buffers

ByteBuffer[] bufferArray = { header, body };

channel.write(bufferArray);

 

  只有在position和limit之间的数据会被写入到channel中,适合动态数据 

转载于:https://www.cnblogs.com/AI-Cobe/p/10022839.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值