Java NIO提供了对Scatter(发散)和Gather(聚合)的支持。这两个概念是用于我们进行Channel读写的。

    发散读允许我们在一次读操作中将Channel中的数据读入多个Buffer。而聚合写允许我们在一次写操作中将多个Buffer的数据写入一个Channel.

    如果我们需要把数据分隔处理时,发散/聚合就非常有用了。例如,如果我们要处理一个包含着body和head的信息,我们可以将body和head分开储存在不同的Buffer中,这样我们就可以更容易分开处理这两部分信息。


发散读例图:

【每日一篇】NIO学习【三】Scatter 与Gather
Java NIO: Scattering Read

简单的发散读实现:

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

ByteBuffer[] bufferArray = { header, body };

channel.read(bufferArray);

如上,我们生成了一个ByteBuffer数组,调用Channel的读方法时,会将Channel(数据源)的数据按数组顺序先后读入两个Buffer中,也就是先填满128位的head,如果还有数据,就写入body.


聚合写例图:

【每日一篇】NIO学习【三】Scatter 与Gather
Java NIO: Gathering Write

简单的聚合写实现:

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

//write data into buffers

ByteBuffer[] bufferArray = { header, body };

channel.write(bufferArray);

同样是按照数组顺序将两个Buffer中的数据先后写入Channel中

相关文章:

  • 2021-09-21
  • 2021-05-02
  • 2021-09-17
  • 2021-11-17
  • 2021-10-21
  • 2021-12-18
  • 2021-04-03
猜你喜欢
  • 2022-01-09
  • 2021-12-28
  • 2021-06-02
  • 2021-12-14
  • 2022-01-09
  • 2021-11-10
相关资源
相似解决方案