朕的 发表于 2026-3-10 17:17:45

数据请求之:字节集拆分与合并

本帖最后由 朕的 于 2026-3-10 17:22 编辑

没怎么搞过 TCP和WebSocket的文件传输,今天试了下,好像数据包大小有限制,

也没找到什么直接能用发方法,自己就写了一个。

<火山程序 类型 = "通常" 版本 = 1 />

方法 _字节集_拆分到数组 <公开 类型 = 整数 返回值注释 = "返回:字节集数组类 成员数" 折叠>
参数 字节集数据 <类型 = 字节集类>
参数 保存到字节集数组 <类型 = 字节集数组类 @需求类型 = 可写入变量>
参数 拆分大小 <类型 = 整数 注释 = "63字节*1024" @默认值 = 64512>
参数 前缀标识 <类型 = 文本型 注释 = "可用于数据封包标识" @默认值 = 空对象>
{
    变量 分割数量 <类型 = 整数>
    变量 前缀字节集 <类型 = 字节集类>
    分割数量 = 字节集数据.取字节集长度 () / 拆分大小
    如果真 (字节集数据.取字节集长度 () % 拆分大小 > 0)
    {
      分割数量 = 分割数量 + 1
    }

    计次循环 (分割数量)
    {
      如果 (取循环索引 () < 分割数量)
      {
            保存到字节集数组.加入成员 (字节集数据.取字节集中间 (取循环索引 () * 拆分大小, 拆分大小))
      }
      否则
      {
            保存到字节集数组.加入成员 (字节集数据.取字节集中间 (取循环索引 () * 拆分大小, 字节集数据.取字节集长度 () - (分割数量 - 1) * 拆分大小))
      }


    }

    如果真 (前缀标识 != 空对象)
    {
      保存到字节集数组.枚举循环 ()
      {
            保存到字节集数组.取枚举值 ().插入字节集 (0, 文本到UTF8 (前缀标识, ))
      }


    }


    返回 (保存到字节集数组.取成员数 ())

}

方法 _字节集_合并从数组到字节集 <公开 类型 = 字节集类 折叠>
参数 拆分后的字节集数组 <类型 = 字节集数组类>
参数 原前缀标识 <类型 = 文本型 注释 = "可用于数据封包标识" @默认值 = 空对象>
{
    变量 结果 <类型 = 字节集类>
    拆分后的字节集数组.枚举循环 ()
    {

      如果 (原前缀标识 != 空对象)
      {
            变量 "//带前缀数据" <类型 = 字节集类>
            // 带前缀数据 = 拆分后的字节集数组.取枚举值 ()
            // 字节集替换 (带前缀数据, 0, 取字节集长度 (文本到UTF8 (前缀标识, )), 取空白字节集 (0))
            子字节集替换 (拆分后的字节集数组.取枚举值 (), 文本到UTF8 (原前缀标识, ), 取空白字节集 (0), 0, 1)
            结果.添加字节集 (拆分后的字节集数组.取枚举值 ())

      }
      否则
      {
            结果.添加字节集 (拆分后的字节集数组.取枚举值 ())

      }


    }

    返回 (结果)

}


cdmmye 发表于 2026-3-10 19:06:33

没必要,接收时候合并即可

朕的 发表于 2026-3-10 19:30:30

cdmmye 发表于 2026-3-10 19:06
没必要,接收时候合并即可

没有标记的情况下,没法知道哪个子包是哪个包的

cdmmye 发表于 2026-3-11 18:42:47

包是连续的,连续组合就不会出错

朕的 发表于 2026-3-11 19:21:40

cdmmye 发表于 2026-3-11 18:42
包是连续的,连续组合就不会出错

没仔细研究过,有时间再试试
页: [1]
查看完整版本: 数据请求之:字节集拆分与合并