默认情况下,我输出的文件是120mb。在这里,我有一个输入和输出缓冲区,这是它的两倍。当我运行此代码时,我得到10mb的输出(默认为11mb)。当我压缩原始的128mb文件时,我得到700kb。为什么我得到11mb而不是zip给我的

static UInt32 len=0;
static char buf[1024*1024*256];
static char buf2[1024*1024*256];
static char *curbuf=buf;
z_stream strm;
void initzstuff()
{
    strm.zalloc = 0;
    strm.zfree = 0;
    strm.opaque = 0;
    int ret = deflateInit(&strm, Z_BEST_COMPRESSION);
    if (ret != Z_OK)
        return;
}

void flush_file(MyOstream o, bool end){
    strm.avail_in = len;
    strm.next_in = (UInt8*)buf;
    strm.avail_out = sizeof(buf2);
    strm.next_out = (UInt8*)buf2;
    int ret = deflate(&strm, (end ? Z_FINISH : Z_NO_FLUSH));
    assert(ret != Z_STREAM_ERROR);
    int have = sizeof(buf2) - strm.avail_out;
    fwrite(buf2, 1, have, o);
    if(end)
    {
        (void)deflateEnd(&strm);
    }
    len=0;
    curbuf=buf;
/*
    fwrite(buf, 1, len, o);
    len=0;
    curbuf=buf;
//*/
}

最佳答案

Zip可以使用Deflate64或其他压缩算法(例如BZip2),并且当您的文件非常稀疏时,可能会导致这种差异。
另外,ZLib的标准仅说明压缩数据的格式,并且归档者如何选择压缩数据的方式,因此7-zip可以使用一些启发式方法,从而减小输出量。

关于c++ - 为什么我用zlib压缩得不好?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6232197/

10-10 03:03