Java NIO开始支持scatter与gatter。scatter与gatter用于实现从Channel读数据和向通道写数据。

scatter从一个通道读取数据并写入到多个Buffer中。因此,scatter实现将通道中的数据写入到多个Buffer中去。

gatter负责将多个buffer中的数据写入到一个channel。因此,gatter实现将多个buffer中的数据聚集到一个channel中去。

scatter和gatter经常用于将需要传输的数据分开处理的场合,例如,如果一条消息由消息头跟消息体组成,你经常需要将消息头与消息体放在不同的buffer中,这样你可以更加方便地处理消息头跟消息体。

Scattering Reads

"scattering read"是将一个Channel的数据读入到多个Buffer中。下图说明了这个原则。

下面是一个scatter read的一个例子。

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body   = ByteBuffer.allocate(1024);ByteBuffer[] bufferArray = { header, body };channel.read(bufferArray);
复制代码

注意到buffer首先被插入到数组,然后将数组作为参数传递给channel.read()方法。read方法按照buffer在数组中的顺序依次读取。当一个buffer满了以后,就往下一个buffer中写数据。

scattering reads在移动到下一个buffer之前会先写满当前buffer。这意味着它不适合动态消息体的情况。换句话说,如果你有一个消息头和消息体,并且消息头的长度是固定的,那么scattering read将会非常适合。

Gathering Writes

"gathering write"是从多个buffer中写入数据到单个channel。如下图描述:

下面的代码是gathering write的一个例子。

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body   = ByteBuffer.allocate(1024);//write data into buffersByteBuffer[] bufferArray = { header, body };channel.write(bufferArray);
复制代码

buffer数组会传递给write方法,它会按照buffer在数组中的顺序依次写入到channel。只有在position和limit之间的数据才会被写入。因此,如果一个buffer的长度为128个字节,但只包含58个字节内容,只有58个字节的内容会被写入到channel。因此,与scattering reads相反,gathering write非常适合动态长度的消息体。

5 Java NIO Scatter 与Gather-翻译相关推荐

  1. 【java】关于Java NIO的一切

    1.概述 概述:关于Java NIO的『一切』 建议看原文 太长了 本文译自Jakob Jenkov的Java NIO.注意,并非逐字翻译,删除了原文中碎碎念的部分,有些地方也加入了自己的理解. Ja ...

  2. Java NIO Introduction

    2019独角兽企业重金招聘Python工程师标准>>> Java NIO (New IO) is an alternative IO API for Java (from Java ...

  3. 海纳百川而来的一篇相当全面的Java NIO教程

    目录 零.NIO包 一.Java NIO Channel通道 Channel的实现(Channel Implementations) Channel的基础示例(Basic Channel Exampl ...

  4. 【Java NIO的深入研究6】JAVA NIO之Scatter/Gather

    Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作. 分散(s ...

  5. Java NIO系列教程(四) Scatter/Gather

    转载自   Java NIO系列教程(四) Scatter/Gather 译文地址  作者:Jakob Jenkov   译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...

  6. java nio 系列教程 四_Java NIO系列教程(四) Scatter/Gather

    作者:Jakob Jenkov   译者:郭蕾 Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道) ...

  7. NIO - Scatter/Gather

    1.Scatter  从一个Channel读取的信息分散到N个缓冲区中(Buufer). 2.Gather  将N个Buffer里面内容按照顺序发送到一个Channel. Scatter/Gather ...

  8. 万字长文:助你攻破 JAVA NIO 技术壁垒

    本文来源:https://honeypps.com/java/java-nio-quick-start/ 现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,J ...

  9. Java NIO之Channel(通道)

    **Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...

最新文章

  1. 买不到口罩怎么办?Python爬虫帮你时刻盯着自动下单!| 原力计划
  2. [leetcode-515-Find Largest Value in Each Tree Row]
  3. 130 道 Kubernetes + Docker + DevOps 大厂面试题及知识点详解
  4. Java中二维数组的用法(不定长二维数组)
  5. 会议交流 | CNCC2021中国计算机大会 —— 知识图谱赋能数字化转型论坛
  6. ubuntu下手动安装jdk6
  7. 今年iPhone 11有3款,索然无味!
  8. 485. 最大连续1的个数
  9. php mysql 跨库_PHP使用PDO进行跨数据库操作
  10. PSCC2014前端切图小方法(不断补充)
  11. 三款适合HDMI信号分配的分配器芯片
  12. WEB自动化测试学习进度
  13. 如何确定直流电机驱动的 PWM 频率
  14. r语言是高级编程语言_什么是R编程?
  15. 10019---层次选择器
  16. 策略性发疯_如何使自己的房屋“智能”而不发疯
  17. 上楼梯问题+不死兔子
  18. HDU-6555-The Fool(整除分块)
  19. 念数字 字符串操作系列2
  20. 泛娱乐新玩法背后的“黑科技”

热门文章

  1. JFinal Web开发学习(一)开启HelloWorld
  2. Leetcode796.Rotate String旋转字符串
  3. jQueryEasyUI应用 – datagrid之CRUD应用
  4. pycharm——常用快捷键操作
  5. 阻止默认事件event.preventDefault();
  6. 常用MIME类型(Flv,Mp4的mime类型设置)(转载)
  7. POI导入数据的过程中,遇到读取以科学计数法显示的数据
  8. CV学习笔记-浅述CV方向
  9. vb子程序未定义怎么改怎么办_vb中总提示子程序或函数未定义
  10. php 转发请求及参数,php – Symfony 2转发请求传递GET / POST参数