По умолчанию я вывожу файл размером 120 Мб. Здесь у меня есть входной и выходной буфер, который удваивает это. Когда я запускаю этот код, я получаю вывод 10 МБ (по умолчанию дает мне 11 МБ). Когда я заархивировал сырой файл 128 МБ, я получил 700 КБ Почему я получаю 11 МБ вместо <1 МБ, как мне дает почтовый индекс? Используя 7-zip manager, я попросил его сжать с помощью gzip, используя deflate, и он дал мне файл размером 4,6 Мб, который все еще намного меньше. Мне очень любопытно, почему это происходит. Такое чувство, что я делаю что-то не так. </p>
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;
//*/
}