Two Classes for Doing Gzip in Memory
Posted
by Gao Dasheng
on July 9th, 2003
Now, many applications need API to do Gzip in memory. The Zlib form, http://www.gzip.org/zlib, provides Gzip and unGzip function, but they are for files. It's very inconvenient to compress and decompress small data that could be compressed in memory. I ported the Gzip and unGzip functions to two template classes, CA2GZIP and CGZIP2A, to do Gzip in memory; they also allocate and deallocate memory automatically. It works with zlib from http://www.gzip.org/zlib. The following is some code for how to use them.
#include "GZipHelper.h"
void main()
{
char plainText[]="Plain text here";
CA2GZIP gzip(plainText,strlen(plainText));
// do compressing here;
LPGZIP pgzip=gzip.pgzip; // pgzip is zipped data pointer,
// you can use it directly
int len=gzip.Length; // Length is length of zipped
// data;
CGZIP2A plain(pgzip,len); // do uncompressing here
char *pplain=plain.psz; // psz is plain data pointer
int aLen=plain.Length; // Length is length of unzipped
// data.
}

Comments
Decompress multiple buffers
Posted by Legacy on 12/19/2003 12:00amOriginally posted by: Makrem
I ask if it is possible to modify the code of compress/decompress gzip in memory to accept multiple bufers composing a big file.
What I want excatly is to decompress a gzip file buffer by buffer using ZLIB in memory routines.
ReplyWrong When Decompress the large file-data
Posted by Legacy on 11/03/2003 12:00amOriginally posted by: suxioajun
I compressed one bitmap with this,but when I compressed with this,I found some data to be lost....faint!
ReplyBest Compression and new code
Posted by Legacy on 07/15/2003 12:00amOriginally posted by: Philippe Boucher
Hi
The new code provide on the web page you link is working correctly for huge data. I found that speed of compression is a LOT increased by using this setting (with best compression) :
CA2GZIPT<65536, Z_BEST_COMPRESSION, Z_DEFAULT_STRATEGY> gzip( (char*)debut, ramFile.GetLength() );
The 65536 seems to helps
ReplyNew bug-fixed package: http://www.geocities.com/gaursoft/
Posted by Legacy on 07/05/2003 12:00amOriginally posted by: Gaur
Reply
Problem with Large Files
Posted by Legacy on 07/03/2003 12:00amOriginally posted by: Lee W. Spencer
First off, thanks for the code. I was needing to do just this very thing only a day or so before you posted GZipHelper. I was very much not looking forward to becoming that intimate with zlib.
Secondly, I have a problem when trying to unzip a very large text(xml) file with CGZIP2A; My original zipped up data is 1.5MB, which compresses greatly to a whopping 25kB. When trying to unzip using CGZIP2A, I only get the first 644465 bytes of the original text.
Using the following code snippet...
(BigExample.gz is available at http://tf7.com/tf7/download/BigExample.gz)
************************
FILE *InputFile = fopen("C:\\Temp\\BigExample.gz", "rb");
lSizeofZipData = 8714;
fread(pGZipData, 1, lSizeofZipData, InputFile);
fclose(InputFile);
// unzip the data
CGZIP2A GZip((LPGZIP)pGZipData, lSizeofZipData);
int UnzippedLen=GZip.Length;
******************************
UnzippledLen comes back as 1261568 and should be 2760000, thus truncating the output.
Any info appreciated.
ReplyCan't delete the header, if you delete it ,I won't be a gzip format.
Posted by Legacy on 07/02/2003 12:00amOriginally posted by: gaur
Reply
10 byte header can be removed
Posted by Legacy on 07/01/2003 12:00amOriginally posted by: jlowrie
The first ten bytes seem to be some sort of header
that can be prepended upon decompression, saving a considerable amount for short buffers (as mentioned by Juan in an earlier post)
This sequence is:
{31,-117,8,0,0,0,0,0,0,11}
Replywell done!!!
Posted by Legacy on 06/27/2003 12:00amOriginally posted by: Sunia
df sdfas dfasdf
Reply
Can this work for Binary Data? LIke a DLL...
Posted by Legacy on 06/26/2003 12:00amOriginally posted by: San
Can you please tell me how to compress a Binary buffer into the memory? I tried this but when I unzip the content is not same.
Please help...
Replyin memory compress does not compress strings well
Posted by Legacy on 06/25/2003 12:00amOriginally posted by: Juan
Normally when u use zlib library to compress strings in memory, the compressed result is much longer than the orginal string since no compress pattern can be developed there.
I just wonder if this solution has the same issue?
Thanks
Reply