Qt小技巧18.解决"qUncompress: Z_DATA_ERROR: Input data is corrupted"问题
1 引言
Qt 中的 qCompress() 和 qUncompress() 函数来进行 QByteAarray 的压缩和解压操作。这些函数提供了方便的方式来对字节数组进行压缩和解压缩,无需处理底层的压缩算法和细节。但是在使用过程中有时候会遇到一些棘手的问题,例如下面这个例子:
2 错误案例
下面是一个错误示例:
#include <QByteArray>
#include <QFile>
#include <QDataStream>
int main()
{
QByteArray originalData = "Hello, Hello, Hello, This is a test for compression and decompression.";
// 压缩数据
QByteArray compressedData = qCompress(originalData, 9); // 9 为压缩级别
// 写入文件
QFile wFile("test.dat");
wFile.open(QIODevice::WriteOnly);
QDataStream wStream(&wFile);
wStream << compressedData;
wFile.close();
// 读取文件
QFile rFile("test.dat");
rFile.open(QIODevice::ReadOnly);
compressedData = rFile.readAll();
rFile.close();
// 解压数据
QByteArray uncompressedData = qUncompress(compressedData);
return 0;
}
此时会报错:"qUncompress: Z_DATA_ERROR: Input data is corrupted",意味着解压缩的输入数据已损坏或有错误。
出错的原因在于读取文件的时候没有用QDataStream流的方式读取文件,而是使用了QFile::readAll,QDataStream写文件的时候会加入“额外的信息”,如果不以QDataStream流的方式读取文件,当然会导致数据错误,所以,读写文件一定要用同样的方式。
3 正确案例
通过上面的分析,正确示例:
#include <QByteArray>
#include <QFile>
#include <QDataStream>
int main()
{
...
// 读取文件
QFile rFile("test.dat");
rFile.open(QIODevice::ReadOnly);
QDataStream rStream(&rFile);
rStream >> compressedData;
rFile.close();
...
}
好了,解决了,如果出现类似问题,解决的思路应该都差不多,一定要保证读写方式的一致性,这是问题的关键所在。
作者QQ:115124903,欢迎交流。
每一步踏出,都是一次探索,一次成长。
每一步踏出,都是一次探索,一次成长。
分类:
Qt小技巧
标签:
Qt小技巧
, qUncompress
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)