`
youyu4
  • 浏览: 440143 次
社区版块
存档分类
最新评论

java NIO 之 Scatter/Gather

 
阅读更多

java NIO 之 Scatter/Gather

 

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

 

  • 分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。
  • 聚集(gather)写入Channel是指在写操作时将多个buffer的数据写入同一个Channel,因此,Channel 将多个Buffer中的数据“聚集(gather)”后发送到Channel。

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

 

 

 

 

Scattering Reads

 

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


        
 

代码如下:

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

 

 

注意:buffer首先被插入到数组,然后再将数组作为channel.read() 的输入参数。read()方法按照buffer在数组中的顺序将从channel中读取的数据写入到buffer,当一个buffer被写满后,channel紧接着向另一个buffer中写。

 

Scattering Reads在移动下一个buffer前,必须填满当前的buffer,这也意味着它不适用于动态消息(译者注:消息大小不固定)。换句话说,如果存在消息头和消息体,消息头必须完成填充(例如 128byte),Scattering Reads才能正常工作。

 

 

 

 

Gathering Writes

 

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);

 

 

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

 

 

 

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

相关推荐

    用Python编程实现控制台爱心形状绘制技术教程

    内容概要:本文档主要讲解了使用不同编程语言在控制台绘制爱心图形的方法,特别提供了Python语言的具体实现代码。其中包括了一个具体的函数 draw_heart() 实现,使用特定规则在控制台上输出由星号组成的心形图案,代码展示了基本的条件判断以及字符打印操作。 适合人群:对编程有兴趣的学生或者初学者,特别是想要学习控制台图形输出技巧的人。 使用场景及目标:适合作为编程入门级练习,帮助学生加深对于控制流、字符串处理及图形化输出的理解。也可以作为一个简单有趣的项目用来表达情感。 阅读建议:建议读者尝试动手运行并修改代码,改变输出图形的颜色、大小等特性,从而提高对Python基础语法的掌握程度。

    优选驾考小程序 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程.zip

    优选驾考小程序 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS

    【国信期货-2024研报】宏观2025年投资策略报告:经济结构性矛盾现拐点 2025年注重破局.pdf

    研究报告

    renren-security-v5.2.0.zip

    前端/后端/AI/运维/全栈工程师 常用工具 2024年最新版

    毕业设计&课设_校园卡管理系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    毕业设计&课设_网上图书商城:计算机毕业设计项目.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    使用yolo3作为特征提取器的ocr,由keras实现,并由tensorrt加速.zip

    使用yolo3作为特征提取器的ocr,由keras实现,并由tensorrt加速keras-yolo3-ocr-tensorrt文本检测使用yolo3作为特征提取器的ocr,由keras实现,并由tensorrt加速光学字符识别(OCR)密集网重量链接https://pan.baidu.com/s/1NEk9A8gWsRMXeE9lKu8Sdg 提取码wvx7参考https://github.com/chineseocr/chineseocr.githttps://github.com/qqwweee/keras-yolo3.githttps://github.com/xiaomaxiao/keras_ocr.git

    BANDIZIP-SETUP-STD-X64.EXE

    前端/后端/AI/运维/全栈工程师 常用工具 2024年最新版

    在 win10 运行 yolov5 deepsort 行人车辆跟踪检测计数.zip

    在 win10 运行 yolov5 deepsort 行人车辆跟踪检测计数win10版本 yolov5 deepsort 行人 车辆跟踪 检测 计数应B站上同学们要求在win10运行更新到python 3.9.10,请不要安装更高版本。更新到yolov5 v6.1版本。使用的权重文件可以在这里下载 https: //github.com/ultralytics/yolov5/releases/tag/v6.1更新至 CUDA 11.3+建议保留 Arial.ttf 文件,或在首次运行时由 yolov5 自动下载。功能实现了出/入分别统计。顯示檢測類別。默认是南/北方向检测,若要检测不同位置和方向,可在main.py文件第13行和21行,修改2个多边形的点。默认识别类别行人、自行车、小汽车、卡车、货运、卡车。检测类别可在 detector.py 文件第 60 行修改。视频比比利运行环境python 3.9.10,pip 22.0.3+pytorch 1.10.2+pip3 安装 -r 要求.txt运行确保安装正确的python和CUDAD

    【大越期货-2024研报】生猪期货早报.pdf

    研究报告

    毕业设计&课设_UrbanRailTransitIncentiveAppManagementSystem.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    【国联证券-2024研报】周期股与周期成长股:寻找跨越周期的成长.pdf

    研究报告

    OceanStor-UltraPath-31.0.1-Windows

    OceanStor UltraPath 31.0.1 for Windows是华为推出的一款多路径管理软件,旨在优化数据存储访问路径。它支持故障转移和负载均衡,确保数据高效传输与业务连续性,为Windows环境下的数据存储系统提供高可用性和稳定性保障。

    node-v22.9.0-x64.msi

    前端/后端/AI/运维/全栈工程师 常用工具 2024年最新版

    notepad3-6-23-203-2.7z

    前端/后端/AI/运维/全栈工程师 常用工具 2024年最新版

    数学建模学习资料 姜启源数学模型课件 M05 微分方程模型 共63页.pptx

    数学建模学习资料 姜启源数学模型课件 M05 微分方程模型 共63页.pptx

    社交距离检测,一个使用 yolo 物体检测的深度学习计算机视觉项目.zip

    社交距离检测您可以在此处找到完整阐述算法和代码的视频(https://youtu.be/PTLZnE6W2tw)Github 通常不支持大于 25 Mb 的文件。你可以在My google drive中找到 yolo 权重下载并移至 yolo-coco 文件夹对于 CPU要在终端中运行此代码*打开你的终端将目录更改为下载此代码的位置如果还没有安装python3,请安装它,如果已经安装了,那就没问题了!运行 python3 -m venv venv 创建一个名为venv的虚拟环境。运行 source venv/bin/activate 以激活您的环境!写入 pip install -r requirements.txt 安装与该项目相关的python依赖项,如opencv,numpy,scipy等。运行命令 time python social_distance_detector.py --input pedestrians.mp4 --output output.avi --display 1 来运行你的社交距离检测项目运行最后一行命令后,将会弹

    【华创证券-2024研报】基础化工行业周报(20241118-20241124):25年看好新疆、新材料、新世界三大主线.pdf

    研究报告

    Yolov4-tiny 和 Yolo-Fastest(Tensorflow2)用于在 Ultra96-v2 板上检测车辆,并且我们支持模型修剪 .zip

    Yolov4-tiny 和 Yolo-Fastest(Tensorflow2)用于在 Ultra96-v2 板上检测车辆,并且我们支持模型修剪。Ultra96 Yolov4-tiny 和 Yolo-Fastest我们将数据集转换为 VOC 格式。我使用 UA-DETRAC 数据集,我们可以使用 ./VOCdevkit/ 文件来转换数据集。在官方的yolov4-tiny中,有一个切片操作来实现CSPnet,但是量化工具不支持该操作,所以我用1*1的卷积来代替。然后我们就可以使用train.py来训练模型了,并将模型结构和权重保存为model.json和model.h5。我使用的是TensorFlow-gpu 2.2.0。然后我们就可以生成适合部署工具的pb文件了,具体可以看./frozon_result/readme.md。然后我们使用 Vitis-AI 来量化我们的模型。我们可以使用 ./scripts/1_vitisAI_tf_printNode.sh 来查找输入和输出,并使用 ./scripts/2_vitisAI_tf_quantize.sh 来量化我们的模

    毕业设计&课设_考试报名管理系统:Java 毕设项目.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

Global site tag (gtag.js) - Google Analytics