`

【Java NIO 简例】分散(Scatter) - 聚集(Gather)

    博客分类:
  • Java
nio 
阅读更多

原文:《Java NIO Scatter / Gather

 

Scatter(分散):将一个 Channel 中的数据读取到多个 Buffer 中。

Gather(聚集):将多个 Buffer 中的数据写入一个 Channel 中。

Scatter/Gather 机制可以方便处理多个分开的数据块。如,一条消息由消息头与消息体组成;将它们分到两个不同的 buffer 中,可以更方便地分而治之。

 

Scatter:分散读取

示例

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

channel.read() 方法会将数据依次填入 resultBuffers 数组的各 buffer 中;

前一个 buffer 被填满数据时才会填后一个 buffer;

即,示例中规定了 header 的长度是 固定 的 128 个字节(byte)。

 

 

Gather:聚集写入

示例

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body = ByteBuffer.allocate(1024);
ByteBuffer[] dataBuffers = {header, body};
channle.write(dataBuffers);

channel.write() 方法会依次将 dataBuffers 数组中各 buffer 所含数据写入 channel;

该方法只会将 buffer 中的有效数据写入 channel

即,示例中的 header 容量是 128 个字节(byte);如果其有效数据只有 50 个字节,则此50个字节被写入 channel 后,就会开始将 body 中的数据写入 channel。

相对 Scatter 的“固定长度”而言,Gather 的处理是动态的“可变长度”。所以在使用要特别注意约定好数据格式,防止“约定长度”不一致导致接收方无法正确解析数据。

 

 

 

 

  • 大小: 14.4 KB
  • 大小: 13.8 KB
分享到:
评论

相关推荐

    【Java NIO 简例】分散(Scatter) – 聚集(Gather)

    原文:《Java NIO Scatter / Gather》 Scatter(分散):将一个 Channel 中的数据读取到多个 Buffer 中。 Gather(聚集):将多个 Buffer 中的数据写入一个 Channel 中。 Scatter/Gather 机制可以方便处理多个分开的...

    JavaNIO chm帮助文档

    Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) FileChannel Java NIO系列教程(八) SocketChannel Java NIO系列教程...

    Java NIO Ron Hitchens著

    8. **scatter/gather I/O**:scatter/gather是指在一次操作中,可以从多个缓冲区读取数据(scatter),或者将数据写入到多个缓冲区(gather),提高了数据处理的效率。 9. **文件系统事件(WatchService)**:Java ...

    Java.NIO资源下载资源下载

    - **散列/收集 (Scatter/Gather)**:解释了如何使用 Channel 进行散列/收集操作,这是一种优化读写操作的技术。 - **FileChannel**:详细讨论了 FileChannel 的使用场景及其特点。 - **内存映射文件 (Memory-Mapped ...

    java nio

    7. ** Scatter/Gather(分散/聚集)**:这是NIO提供的另一种高效I/O技术。通过scatter操作,可以从多个缓冲区分散读取数据;通过gather操作,可以将多个缓冲区的数据聚集写入。 在实际开发中,Java NIO常用于高并发...

    高手使用Java NIO编写高性能的服务器

    7. **scatter/gather(分散/聚集)**:NIO允许数据从多个缓冲区分散写入一个通道,或者从一个通道聚集读入多个缓冲区,这对于处理多个小数据块的传输非常有效。 8. **异步文件操作**:Java NIO2(Java 7引入)引入...

    javaNIO很好的资料

    #### 分散(Scatter)/ 聚集(Gather) - **分散读取**:将通道中的数据分散到多个缓冲区中。 - **聚集写入**:从多个缓冲区中收集数据,然后写入到通道中。 #### 通道之间的数据传输 NIO 允许直接在两个通道之间...

    Java NIO系列教程

    - **Scatter/Gather**:允许数据从多个缓冲区写入通道,或从通道读取数据到多个缓冲区中。 - **FileLocks**:用于文件锁定的机制,确保文件的安全访问。 #### 总结 Java NIO 通过引入 Channels、Buffers 和 ...

    Java NIO原理分析及代码实例

    这是一种分散/聚集读写技术,可以一次操作多个缓冲区,提高数据处理效率。scatter操作是从通道读取数据到多个缓冲区,gather则是从多个缓冲区写入通道。 8. **内存映射文件(Memory-Mapped File)** 这是一种将...

    java NIO 中文开发文档

    - **scatter/gather I/O**:scatter/gather允许数据从多个缓冲区写入通道,或者从通道读取到多个缓冲区,提高了数据处理的灵活性。 Java NIO适用于高性能服务器端和客户端应用,例如在处理高并发连接的网络服务器中...

    Java NIO (中英版)

    7. ** Scatter/Gather(分散/聚集)**:NIO支持Scatter/Gather读写,即可以从多个缓冲区分散读取数据,也可以向多个缓冲区聚集写入数据,这在处理大块数据时非常有用。 8. **内存映射文件(Memory-Mapped Files)**...

    Java NIO入门

    教程可能还会深入讲解NIO的高级特性,如scatter/gather(分散/聚集)读写,以及如何使用`Selector`进行多路复用。通过学习这个教程,开发者可以更好地理解和掌握Java NIO,从而在实际项目中有效提升程序的性能和并发...

Global site tag (gtag.js) - Google Analytics