觅风论坛
标题:
hp-socket实现WS_流式解压源码分享
[打印本页]
作者:
意大利面拌42号
时间:
4 小时前
标题:
hp-socket实现WS_流式解压源码分享
hp-socket实现WS_流式解压源码分享
.版本 2
.支持库 spec
.子程序 WS_流式解压, 字节集, 公开
.参数 压缩数据, 字节集, 参考
.局部变量 pZlib, 整数型
.局部变量 输出缓冲区, 字节集
.局部变量 结果码, 整数型
.局部变量 预估大小, 整数型
.局部变量 补尾数据, 字节集
.局部变量 已写入长度, 整数型
.如果真 (取字节集长度 (压缩数据) = 0)
返回 ({ })
.如果真结束
预估大小 = 取字节集长度 (压缩数据) × 10
输出缓冲区 = 取空白字节集 (预估大小)
' 1. 完整初始化(堆分配 + zlib内部状态创建)
pZlib = 申请内存_ (56)
_inflateInit2 (pZlib, -15, _zlibVersion (), 56)
' 2. 预分配缓冲区一次性解压
' 填写 z_stream 结构体字段
_Set (pZlib, 0, 取变量数据地址 (压缩数据)) ' strm.next_in
_Set (pZlib, 4, 取字节集长度 (压缩数据)) ' strm.avail_in
_Set (pZlib, 12, 取变量数据地址 (输出缓冲区)) ' strm.next_out
_Set (pZlib, 16, 预估大小) ' strm.avail_out
结果码 = _inflate (pZlib, #Z_FLUSH_SYNC_FLUSH)
' RFC 7692 标准补尾,刷出全部残留数据
.如果真 (结果码 = #Z_ERROR_OK)
补尾数据 = { 0, 0, 255, 255 }
_Set (pZlib, 0, 取变量数据地址 (补尾数据)) ' strm.next_in
_Set (pZlib, 4, 4) ' strm.avail_in
结果码 = _inflate (pZlib, #Z_FLUSH_SYNC_FLUSH)
.如果真结束
' 3. 释放资源
_inflateEnd (pZlib)
' 4. 返回结果
已写入长度 = 预估大小 - _Get (pZlib, 16) ' strm.avail_out
释放内存_ (pZlib)
.如果真 (已写入长度 > 0)
返回 (取字节集左边 (输出缓冲区, 已写入长度))
.如果真结束
返回 ({ })
.版本 2
.DLL命令 _inflateInit2, 整数型, "zlib1.dll", "@inflateInit2_"
.参数 strm, 整数型
.参数 windowBits, 整数型
.参数 version, 文本型
.参数 stream_size, 整数型
.DLL命令 _zlibVersion, 文本型, "zlib1.dll", "@zlibVersion"
.DLL命令 _inflate, 整数型, "zlib1.dll", "@inflate"
.参数 strm, 整数型
.参数 flush, 整数型
.DLL命令 _inflateEnd, 整数型, "zlib1.dll", "@inflateEnd"
.参数 strm, 整数型
.版本 2
.常量 Z_FLUSH_SYNC_FLUSH, "2"
.常量 Z_ERROR_OK, "0"
复制代码
作者:
lhq19880526
时间:
1 小时前
豆腐干士大夫
作者:
31235634
时间:
半小时前
必须支持。。。。。。。
欢迎光临 觅风论坛 (https://www.eyyba.com/)
Powered by Discuz! X3.4