`

翻译-【Java NIO学习系列】Java NIO Scatter/Gather

 
阅读更多

  原文连接:http://tutorials.jenkov.com/java-nio/scatter-gather.html

     Jave NIO支持scatter/gather(分散/聚集),scatter/gather的概念用于描述从通道里面读取和写入通道。

     从通道里面分散读是在读操作的时候,读取的数据被写入多个buffer中。因此,通道“scatters”将数据从通道写入多个buffer中。

     聚集写入通道是在写操作时,写入多个buffer的数据到一个通道,因此,通道“gathers”将数据从多个buffer中写入通道。

     scatter/gather最实用的情况是:需要传输的数据各个部分要分开:例如:一个由消息头和消息体组成的消息,消息体和消息头可能被分开在不同的buffer中,这样处理后,将使得你分开在消息头和消息体更方便的做处理。

      Scattering Reads

      “Scattering Reads”:数据从一个通道读取到多个buffer,图示描述如下:

      

  代码示例如下:

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

ByteBuffer[] bufferArray = { header, body };

channel.read(buffers);

    注意buffers的首先包含在一个数组,然后再将数组作为channel.read() 的参数。read()方法从通道里面写数据到按照在数组中的顺序写入到buffers,当第一个buffer写满后,通道将会填充下个buffer。

    事实上Scattering Reads在移动下一个buffer前,必须填充完毕当前的buffer,这意味着它不适应用于消息部分是动态大小的。也就是说,如果存在消息头和消息体,消息头必须完成填充(例如 128byte),Scattering Read才能工作好。

     Gathering Writes

      "gathering write" 数据从多个buffer写入到通道里面,图示如下:

 

  代码示例入下:

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

//write data into buffers

ByteBuffer[] bufferArray = { header, body };

channel.write(buffers);

    buffers数组作为write()方法 的入参,按照数组中的顺序,一个个将buffer的内容写入。仅仅将buffer position 与 limit 之间的元素写入。因此,如果一个buffer的capacity 为128byte,仅仅包含58byte数据,58byte将被从buffer中写入到通道中。因此与Scattering Reads相反,Gathering Writes在动态的消息部分也能处理好。

  • 大小: 7.4 KB
  • 大小: 6.9 KB
分享到:
评论

相关推荐

    JavaNIO chm帮助文档

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

    yubo-java-nio:java nio的学习项目

    yubo-java-nioNIO 直接缓冲区 VS 非直接缓冲区直接缓冲区1、直接缓冲区最适合I/O 2、创建成本比非直接缓冲区高 3、直接缓冲区使用的内存是通过调用原生的、操作系统特定的代码来分配的 4、内存存储区域不受限制垃圾...

    Java.NIO资源下载资源下载

    根据提供的文件信息,我们可以提取并总结出关于Java NIO(New Input/Output)的重要知识点。...通过本书的学习,开发者可以全面掌握 Java NIO 的各种特性和技巧,从而写出更加高效可靠的 Java 代码。

    Java NIO Ron Hitchens著

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

    Java NIO系列教程

    ### Java NIO 系列教程知识点详解 #### Java NIO 概述 Java NIO (New IO) 是从 Java 1.4 开始提供的一种新的 I/O 处理方式,旨在改进传统 Java IO API 的性能并引入更高效的数据处理机制。Java NIO 主要包括三大...

    java-NIO 指南

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(阻塞I/O)相对。NIO在Java 1.4版本中被引入,其主要特点是允许程序进行非阻塞式读写操作,提高了处理大量并发连接的能力,...

    java NIO 中文开发文档

    在学习Java NIO时,这份中文开发文档最全版.pdf将涵盖这些核心概念的详细解释、示例代码以及最佳实践,帮助读者掌握如何在实际项目中应用NIO。对于初学者来说,深入理解这些内容,将有助于构建高效、可扩展的Java...

    java nio

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种I/O模型,旨在提供一种更高效、更具弹性的I/O处理方式。NIO与传统的BIO(Blocking I/O)模式相比,主要区别在于对I/O...

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

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

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

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

    Java NIO原理分析及代码实例

    Java NIO(New IO)是Java 1.4版本引入的一个新API,全称为Non-blocking Input/Output,它提供了一种不同于传统IO的编程模型,传统IO基于块I/O,而NIO则基于通道(Channel)和缓冲区(Buffer)进行数据传输。NIO的...

    javaNIO很好的资料

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

Global site tag (gtag.js) - Google Analytics