使用 ZLIB 解压 出现 Z_DATA_ERROR 的错误排查 zlib data_error
来源:互联网 发布:软件开发需求阶段 编辑:程序博客网 时间:2024/06/08 05:04
这两天在设计实现一个APP安装包时,发现ZLIB解压一直出现Z_DATA_ERROR错误。查找了不少资料,没发现错误原因。一度怀疑是ZLIB的一个BUG。最后发现是自己的疏忽,惭愧得很。记录在此,希望也能帮到有需要的人。
压缩时,被压缩的数据写入到文件中是使用的ofstream,使用的是以下的代码:
ofstream ofs(fp, ios::out | ios::binary);
if(ofs.is_open())
{
ofs.write((char*)uncompressdata + writen_len, strtoi(siz));
}
而当读取压缩后的数据时,使用的是ifstream,使用的是以下的代码:
ifstream ifs;
ifs.open(path.c_str());
if(!ifs.is_open())
{
// 文件打开失败
return false;
}
ifs.write ......
乍一看好像没什么问题,但仔细对比,发现构造ifstream对象时,并没有将ios::in | ios::binary传入。导致的问题就是,写入的数据与读取的数据有细节是有出入。将构造方法改一下就好了。
改成如下代码:
ifstream ifs(path.c_str(),ios::in | ios::binary);
或者改成以下这样:
ifstream ifs;
ifs.open(path.c_str(),ios::in | ios::binary);
通过这个问题得出的一个警示:
写文件与读文件,最好采用相同的读取方式才能保证从文件中读取出来的数据与写入到文件中的数据完全一致。特别是对ZLIB这种库,任何一个字节不一致,都会导致错误发生。
PS:原创,转载请注明出处。
- 使用 ZLIB 解压 出现 Z_DATA_ERROR 的错误排查 zlib data_error
- zlib压缩中uncompress函数返回Z_DATA_ERROR错误!!!
- zlib压缩和解压的使用
- 关于zlib安装时出现的错误
- 使用zlib压缩/解压文件
- 使用GZIPOutputStream解压byte[]出现Unexpected end of ZLIB input stream的解决方法
- [Zlib]_[初级]_[使用zlib库解压提取文件]
- [zlib]_[初级]_[使用Zlib完整解压zip内容]
- 使用zlib实现gzip格式数据的压缩和解压
- 使用Zlib库进行文件的压缩和解压
- 使用Zlib库进行文件的压缩和解压
- 使用zlib实现gzip格式数据的压缩和解压
- 使用zlib库函数实现http报文的解压
- Zlib 简单的使用
- zlib的使用
- zlib 的使用
- zlib 的使用
- zlib 的使用
- JSP标准标签库
- qsort函数的用法
- VMware下Ubuntu 14.04的网络设置
- 查数组中的数
- weiphp-自动回复消息
- 使用 ZLIB 解压 出现 Z_DATA_ERROR 的错误排查 zlib data_error
- iOS学习之——视图切换
- 被520刷屏,来个段子:关于 “520” “521”这种节日的吐槽
- jQuery 实现广告条效果
- DirectX技术----D2D基础篇(一)
- BLE通信(续)
- string
- MongoDb的“not master and slaveok=false”错误及解决方法
- Smarty相关