觅风论坛

标题: hp-socket实现WS_流式解压源码分享 [打印本页]

作者: 意大利面拌42号    时间: 4 小时前
标题: hp-socket实现WS_流式解压源码分享
hp-socket实现WS_流式解压源码分享


084350sj0sbcqssshqt86u.png
  1. .版本 2
  2. .支持库 spec

  3. .子程序 WS_流式解压, 字节集, 公开
  4. .参数 压缩数据, 字节集, 参考
  5. .局部变量 pZlib, 整数型
  6. .局部变量 输出缓冲区, 字节集
  7. .局部变量 结果码, 整数型
  8. .局部变量 预估大小, 整数型
  9. .局部变量 补尾数据, 字节集
  10. .局部变量 已写入长度, 整数型

  11. .如果真 (取字节集长度 (压缩数据) = 0)
  12.     返回 ({  })
  13. .如果真结束
  14. 预估大小 = 取字节集长度 (压缩数据) × 10
  15. 输出缓冲区 = 取空白字节集 (预估大小)
  16. ' 1. 完整初始化(堆分配 + zlib内部状态创建)
  17. pZlib = 申请内存_ (56)
  18. _inflateInit2 (pZlib, -15, _zlibVersion (), 56)
  19. ' 2. 预分配缓冲区一次性解压
  20. ' 填写 z_stream 结构体字段
  21. _Set (pZlib, 0, 取变量数据地址 (压缩数据))  ' strm.next_in
  22. _Set (pZlib, 4, 取字节集长度 (压缩数据))  ' strm.avail_in
  23. _Set (pZlib, 12, 取变量数据地址 (输出缓冲区))  ' strm.next_out
  24. _Set (pZlib, 16, 预估大小)  ' strm.avail_out
  25. 结果码 = _inflate (pZlib, #Z_FLUSH_SYNC_FLUSH)
  26. ' RFC 7692 标准补尾,刷出全部残留数据
  27. .如果真 (结果码 = #Z_ERROR_OK)
  28.     补尾数据 = { 0, 0, 255, 255 }
  29.     _Set (pZlib, 0, 取变量数据地址 (补尾数据))  ' strm.next_in
  30.     _Set (pZlib, 4, 4)  ' strm.avail_in
  31.     结果码 = _inflate (pZlib, #Z_FLUSH_SYNC_FLUSH)
  32. .如果真结束
  33. ' 3. 释放资源
  34. _inflateEnd (pZlib)
  35. ' 4. 返回结果
  36. 已写入长度 = 预估大小 - _Get (pZlib, 16)  ' strm.avail_out
  37. 释放内存_ (pZlib)
  38. .如果真 (已写入长度 > 0)
  39.     返回 (取字节集左边 (输出缓冲区, 已写入长度))
  40. .如果真结束
  41. 返回 ({  })
  42. .版本 2

  43. .DLL命令 _inflateInit2, 整数型, "zlib1.dll", "@inflateInit2_"
  44.     .参数 strm, 整数型
  45.     .参数 windowBits, 整数型
  46.     .参数 version, 文本型
  47.     .参数 stream_size, 整数型

  48. .DLL命令 _zlibVersion, 文本型, "zlib1.dll", "@zlibVersion"

  49. .DLL命令 _inflate, 整数型, "zlib1.dll", "@inflate"
  50.     .参数 strm, 整数型
  51.     .参数 flush, 整数型

  52. .DLL命令 _inflateEnd, 整数型, "zlib1.dll", "@inflateEnd"
  53.     .参数 strm, 整数型
  54. .版本 2

  55. .常量 Z_FLUSH_SYNC_FLUSH, "2"
  56. .常量 Z_ERROR_OK, "0"
复制代码



作者: lhq19880526    时间: 1 小时前
豆腐干士大夫
作者: 31235634    时间: 半小时前
必须支持。。。。。。。




欢迎光临 觅风论坛 (https://www.eyyba.com/) Powered by Discuz! X3.4