一般我们自己用.gz文件的时候会先
gzip xxx.gz
然后就地解压缩生成文件,如果本身就是要原文件还行,但如果再程序需要在内存中再处理,就不OK了。
因为会浪费两次I/O,特别是文件特别大或者特别多的时候。
因此,使用zlib将.gz文件直接解压并读取到内存,就很重要了。
#include
#include
#include
#define GZ_BUF_SIZE 1048576
bool gzLoad(char* gzfn, ::std::string &out)
{
//open .gz file
gzFile gzfp = gzopen(gzfn,"rb");
if(!gzfp)
{
return false;
}
//read and add it to out
unsigned char buf[GZ_BUF_SIZE];
int have;
while( (have = gzread(gzfp,buf,GZ_BUF_SIZE)) > 0)
{
out.append((const char*)buf,have);
}
//close .gz file
gzclose(gzfp);
return true;
}
int main(int argc,char** argv)
{
if(argc!=2)
{
::std::cout<
return -1;
}
::std::string out;
if(gzLoad(argv[1],out))
{
::std::cout<
}
else
{
::std::cout<
}
return 0;
}