使用python-lz4解压lz4net压缩的未知长度内容报错如何解决
问题原因
C# lz4net库的LZ4Codec.WrapHC()方法输出的压缩数据格式与python-lz4默认块解压格式不匹配:LZ4Codec.WrapHC()输出的内容前4字节为小端序存储的原始未压缩数据长度,后续才是实际LZ4压缩块内容,python-lz4默认不会主动解析该前缀作为解压缓冲区大小,因此直接解压会报错。
解决方案
先从压缩数据中解析出前缀存储的原始未压缩长度,再传入解压接口即可,修改后代码如下:
import lz4.block import struct with open("compressed.msgpk", "rb") as f: content = f.read() if content[0] == 1: # 解析前4字节小端序存储的原始未压缩长度 uncompressed_size = struct.unpack("<I", content[1:5])[0] # 传入实际压缩内容与原始长度完成解压 uncompressed = lz4.block.decompress(content[5:], uncompressed_size=uncompressed_size)
注意事项
如果按上述修改仍报错,可检查压缩侧是否在LZ4Codec.WrapHC()输出后额外追加了其他自定义头部,确认压缩数据结构与上述逻辑匹配即可。
内容的提问来源于stack exchange,提问作者Waqas
相关产品推荐
相关产品推荐

