zoukankan      html  css  js  c++  java
  • 【JAVA】【NIO】5、Java NIO Scatter / Gather

    标题手段Java NIO该分散体浓缩
    Java NIO内置支持分散与收集。的概念主要用于信道分散聚集的读写。


    读出的分散体的一个通道被读多个数据buffer在。因此。数据分散到多个buffer中。
    对一个通道的集中写就是将数据从多个buffer中写到一个通道中。因此。通道从多个buffer将数据收集到一个通道中。
    分散收集经经常使用于对数据传输分开处理的场景。

    比方,一条消息由header和body构成,你须要将header和body保存在不同的buffer中。

    这样做就是的对header和body分开处理更加简单了。

    分散读取

    这里写图片描写叙述
    看一个样例:
    这里写图片描写叙述
    注意buffer是怎样插入到数组中的,以及数组作为參数传递给了channel.read方法。read方法从channel中取出数据,依照buffer数组中buffer的顺序将数据写入,一个满了。就会顺序写到下一个buffer中。
    其实,分散读取在移动到下一个buffer前会先填充满一个buffer,意味着这样的方式不适合消息大小动态变化的情况。

    换言之,假设你有一个header和body,然后header是固定大小的(比方:128字节),这样的情况,分散读取就能发挥的非常好。

    集中写

    这里写图片描写叙述
    这里写图片描写叙述

    注意:Buffer的flip方法调用

    buffer数组作为參数传递给write方法,将buffer的内容依照顺序写入通道。

    仅仅处于position和limit之间的数据才会写入。
    因此,假设一个buffer有128字节的容量。可是仅仅有58字节的内容,那么仅仅有58字节会写入通道中。所以。和分散读取相比。集中写对于消息大小不固定的处理会更好。

    下一节:【JAVA】【NIO】6、Java NIO Channel to Channel Transfers

  • 相关阅读:
    使用 Fiddler2 进行接口测试的方法
    [cpyhon源代码]dict对象原理学习
    python PEPs-KEY
    python PEP1-总纲
    Python 容器的可变性
    Python源码分析:PyObject对象的起源与多态的实现
    python源码分析:dict对象的实现
    【ShadowsSocks】相关知识汇总
    python str函数isdigit、isdecimal、isnumeric的区别
    python 核心编程 第七章习题
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4651594.html
Copyright © 2011-2022 走看看