Java NIO Scatter Gather

Java I/O新境界:用Scatter/Gather玩转数据流! Scatter/Gather” I/O 是 Java NIO 中的一个高级特性,它允许你以非阻塞的方式从一个通道(Channel)读取数据到多个缓冲区(Scattering Reads),或者将多个缓冲区的数据写入同一个通道(Gathering Writes)。这种机制能够高效地处理多个缓冲区的数据,使得I/O操作更加灵活。 阅读详情

Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel中读取或者写入到Channel的操作。

分散(scatter):从Channel中读操作时,将读取的数据写入多个buffer中。
聚集(gather):向Channel中写操作时,将多个buffer的数据写入同一个Channel。

scatter / gather经常用于需要将传输的数据分开处理的场合,例如传输一个由消息头和消息体组成的消息,你可能会将消息体和消息头分散到不同的buffer中,这样你可以方便的处理消息头和消息体。

Scattering Reads是指数据从一个channel读取到多个buffer中。如下图描述:

代码示例如下:

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


1、buffer首先被插入到数组
2、然后再将数组作为channel.read() 的输入参数。
3、read()方法按照buffer在数组中的顺序将从channel中读取的数据写入到buffer,当一个buffer被写满后,channel紧接着向另一个buffer中写。
4、Scattering Reads在移动下一个buffer前,必须填满当前的buffer,这也意味着它不适用于动态消息(消息大小不固定)。换句话说,如果存在消息头和消息体,消息头必须完成填充(例如 128byte),Scattering Reads才能正常工作。

Gathering Writes是指数据从多个buffer写入到同一个channel。如下图描述:

代码示例如下:

ByteBuffer header = ByteBuffer.allocate(128);
ByteBuffer body   = ByteBuffer.allocate(1024);
//write data into buffers
ByteBuffer[] bufferArray = { header, body };
channel.write(bufferArray);


1、buffers数组是write()方法的入参
2、write()方法会按照buffer在数组中的顺序,将数据写入到channel
3、注意只有position和limit之间的数据才会被写入。
4、因此,如果一个buffer的容量为128byte,但是仅仅包含58byte的数据,那么这58byte的数据将被写入到channel中。
5、因此与Scattering Reads相反,Gathering Writes能较好的处理动态消息。

Java NIO 高级特性:Scatter_Gather与文件锁定 本文旨在帮助 Java 开发者深入理解 Java NIO 中的 Scatter/Gather 和文件锁定这两个高级特性。我们会详细介绍它们的概念、原理、使用方法以及实际应用场景,范围涵盖从基础概念到项目实战的各个方面。本文首先会介绍相关的术语和概念,然后通过故事引入的方式讲解 Scatter/Gather 和文件锁定的核心概念,接着阐述它们的原理和操作步骤,通过代码示例展示实际应用,探讨实际应用场景和未来发展趋势,最后进行总结并提出思考题。Java NIO。 阅读详情

相关推荐

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

原文:《Java NIO Scatter / Gather》 Scatter(分散):将一个 Channel 中的数据读取到多个 Buffer 中。 Gather(聚集):将多个 Buffer 中的数据写入一个 Channel 中。 Scatter/Gather 机制可以方便处理多个分开的数据块。如,一条消息由消息头与消息体组成;将它们分到两个不同的 buffer 中,可以更方便地分而治之。 Scatter:分散读取 示例 Java代码   ByteBuffer header = ByteBuffer.allocate(128);   ByteBuffer body = ByteBuffer

Java NIO 系列教程

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。本系列教程将有助于你学习和理解Java NIO。感谢并发编程网的翻译和投递。 (关注ITeye官微,随时随地查看最新开发资讯、技术文章。) Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区

~ Caesar's wish书屋 ~ 839

相衬成像介绍

相衬成像介绍

qq_41981768的博客 2913

Java NIO Scatter 和 Gather

Java NIO带有内置的scatter和gather支持。scatter和gather是在读取和写入Channel中使用的概念。 从Channel的scatter read是将数据读取到多个缓冲区。因此,将数据从通道“分散”到多个缓冲区中。 gather write到Channel是一种写操作,它将来自多个缓冲区的数据写到单个Channel中。因此,将来自多个缓冲区的数据“收集”到一个通道中。 在需要分别处理传输数据的各个部分的情况下,scatter和gather可能非常有用。例如,如果消息由标题和

wwwcomcn123的专栏 382

Oracle EBS MRP 模块测试记录

MRP 模块测试记录        构思:创建Shirt成品物料,它由Cloth和Button组成。1*Shirt=1*Cloth+8*Button。        首先创建这三个物料(复制模板创建),并分配给T02。        创建BOM,将这三个物料关联起来。        分别创建资源(人工和设备)制造Cloth和Button。        分别创建两个部门(HumanDep和Mach

NetSuite 张老师 8166

linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

tun/tap设备是操作系统内核中的虚拟网络设备,是用软件模拟的网络设备,提供与硬件网络设备完全相同的功能。主要用于用户空间和内核空间传递报文。tun/tap对于硬件网络设备而言,一端连接的是物理网络,一端连接的是网络协议栈。对于tun/tap设备而言,一端连接的是应用程序(通过 字符设备文件),一端连接的是网络协议栈。

糖果墙的博客 6413

java NIO 之 Scatter/Gather

java NIO 之 Scatter/Gather         Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(通道)中读取或者写入到Channel的操作。   分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scat...

yjc0403的博客 201

Unity3d游戏开发工程师笔试题学习

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、学习背景二、错题记录2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 提示:这里可以.

m0_54231818的博客 5465

Java NIO Scatter / Gather

Java NIO引入了scatter/gather机制,用于高效地处理通道数据的读写。Scattering read允许从单个通道读取数据并分散到多个缓冲区,适用于处理固定大小的数据部分,如消息的header和body。Gathering write则相反,它从多个缓冲区收集数据并写入单个通道,适用于处理可变大小的数据。这两种操作通过缓冲区数组实现,分别使用channel.read(bufferArray)和channel.write(bufferArray)方法。Scatter/gather在处理分段数据

Java的专栏 689

数字后端DRC Violation定位与自动化修复:Innovus与Calibre协同实战

设计规则检查(DRC)是芯片tapeout前确保版图可制造性的关键验证环节。在数字后端流程中,Calibre作为signoff级物理验证工具,会依据代工厂SVRF规则文件对GDS进行严格几何检查;而Innovus则提供快速迭代的in-design DRC反馈。两者协同成为工程师定位violation、保障流片成功的主流工作流。面对成千上万条DRC violation,高效的定位与分类思路、跨工具映射技巧,以及基于Tcl脚本的自动化修复方法,能大幅缩短物理验证周期。本文从DRC的分层定位出发,结合Innovu

weixin_29185167的博客 336

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 252

Java的NIO之Scatter和Gather

Java的NIO开始支持scatter/gather,scatter/gather用于描述从channel中读取数据或则写入数据到channel的操作: 分散(scatter) 从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。 聚集(gather)写入Channel

惜暮 833

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

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写入数据和从chann...

142

一键熄火:在 SAP ABAP 平台停用 OAuth 2.0 Client 的正确姿势

本文是一篇面向SAP ABAP平台运维与开发团队的实战指南,重点讲解了OAuth 2.0客户端的停用操作。文章首先阐述了停用的必要性——当客户端存在泄漏风险或配置错误时,停用能在阻断访问的同时保留配置。随后详细介绍了通过SOAUTH2事务码执行停用的具体步骤,并区分了"停用"、"删除"和"撤销令牌"三个关键概念及其适用场景。 文章提供了两个真实案例:一个是怀疑客户端泄漏后的紧急处置流程,另一个是合规审计期间的冻结与恢复操作。最后总结了一份验证清单,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 278

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java中的NIO详解Day04-Scatter和Gather

Scatter和GatherScatter和GatherScatterGatherScattering ReadsGathering Writes Scatter和Gather Java NIO支持Scatter和Gather Scatter和Gather用于描述从Channel中读取或者写入到Channel中的操作 Scatter和Gather经常用于需要将传输的数据分开处理的场合: 传输一个由消息头和消息体组成的消息,需要将消息体和消息头分散到不同的Buffer中,这样可以方便地处理消息头和消息体

攻城狮Chova的博客 628

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java NIO之Scatter和Gather

前面的文章分享了Buffer和Channel,以及关于Buffer和Channel的基本操作。这篇文章继续分享关于Channel的Buffer的操作Scatter和Gather,这篇内容比较简单。 什么是Scatter和Gather Scatter和Gather的字面意思就可以分好的解释他们各自的用途。其中Scatter的意思是分散,Gather的意思是聚集,我们再来看一下他们是如何分散和聚集的,...

QiwooMobile的博客 361

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java NIO 之 Scatter 和gather

1. scatter read 一个Channel的数据写入到多个buffer。 ByteBuffer header = ByteBuffer.allocate(128); ByteBuffer body = ByteBuffer.allocate(1024); ByteBuffer[] bufferArray = { header, body }; channel

Just Do It! 646

【译】Java NIO Scatter / Gather

Java NIO原生支持scatter和gather。Scatter/Gather是从channel中读取或者是向channel中写入时的概念。 一个scatter类型的reading操作,就是一次读操作中会读取多个buffer。 一个gather类型的writing操作,就是一次向channel中写入多个buffer。 在需要分别处理传输数据的各个部分的情况下,Scatter/Gather...

nickDaDa的博客 251

Java NIO Scatter/Gather

Scatter/Gather Java NIO中scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。 分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。 聚集(gather...

书香水墨 241

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

原文链接 Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。 分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。 聚集...

qq_34125981的博客 180
上一篇: Java NIO Pipe
下一篇: Java NIO Selector(一)
mylife512
博客等级 码龄10年 1463粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mylife512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值