zlib.error: Error -5 while decompressing data: incomplete or truncated stream

参考:https://stackoverflow.com/questions/32367005/zlib-error-error-5-while-decompressing-data-incomplete-or-truncated-stream-in

mysql业务表中有一个字段longtext类型,数据太大,所以决定使用zlib压缩之后存储到mysql中。在存入的时候,使用zlib.compress进行压缩,在查询的时候,使用zlib.decompress进行解压缩。

压缩:

 compressed_data = zlib.compress(data.encode("utf-8"))
 data = base64.b64encode(compressed_data)

  

解压缩

data = zlib.decompress(base64.b64decode(data))
data = data.decode(encoding='utf-8')

问题出在zlib.decompress的时候,执行抛出异常:

zlib.error: Error -5 while decompressing data: incomplete or truncated stream

原因:

数据的大小超过了可以存储在内存的大小。

解决:

使用compressobj,compressobj返回一个压缩对象,用来压缩不能一下子读入内存的数据流。它通过缓冲流并将其以可管理的块的形式输入到解压缩器来处理流。

代码:

zobj = zlib.decompressobj()
data = zobj.decompress(base64.b64decode(workflowDetail.origin_data))
data = data.decode(encoding='utf-8')

总结:

字符串:使用zlib.compress可以压缩字符串。使用zlib.decompress可以解压字符串。

数据流:压缩:compressobj,解压:decompressobj

搞了一个公众号PostgreSQL运维技术,欢迎来踩~

悄悄放一张:

PostgreSQL运维技术 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值