Two Classes for Doing Gzip in Memory

Environment: OS independent

Now, many applications need API to do Gzip in memory. The Zlib form,, 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 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.


Download demo project - 131 Kb


  • Decompress multiple buffers

    Posted by Legacy on 12/19/2003 12:00am

    Originally 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.

  • Wrong When Decompress the large file-data

    Posted by Legacy on 11/03/2003 12:00am

    Originally posted by: suxioajun

    I compressed one bitmap with this,but when I compressed with this,I found some data to be lost....faint!

  • Best Compression and new code

    Posted by Legacy on 07/15/2003 12:00am

    Originally posted by: Philippe Boucher


    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

  • New bug-fixed package:

    Posted by Legacy on 07/05/2003 12:00am

    Originally posted by: Gaur

  • Problem with Large Files

    Posted by Legacy on 07/03/2003 12:00am

    Originally 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


    FILE *InputFile = fopen("C:\\Temp\\BigExample.gz", "rb");
    lSizeofZipData = 8714;
    fread(pGZipData, 1, lSizeofZipData, 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.

  • Can't delete the header, if you delete it ,I won't be a gzip format.

    Posted by Legacy on 07/02/2003 12:00am

    Originally posted by: gaur

  • 10 byte header can be removed

    Posted by Legacy on 07/01/2003 12:00am

    Originally 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:


  • well done!!!

    Posted by Legacy on 06/27/2003 12:00am

    Originally posted by: Sunia

    df sdfas dfasdf

  • Can this work for Binary Data? LIke a DLL...

    Posted by Legacy on 06/26/2003 12:00am

    Originally 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...

  • in memory compress does not compress strings well

    Posted by Legacy on 06/25/2003 12:00am

    Originally 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?

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: March 27, 2014 Teams need to deliver quality software faster and need integrated agile planning, task tracking, source control, auto deploy with continuous builds and a configurable process to adapt to the way you work. Rational Team Concert and DevOps Services (JazzHub) have everything you need to build great software, integrated seamlessly together right out of the box or available immediately in the cloud. And with the Rational Team Concert Client, you can connect your …

  • When it comes to desktops – physical or virtual – it's all about the applications. Cloud-hosted virtual desktops are growing fast because you get local data center-class security and 24x7 access with the complete personalization and flexibility of your own desktop. Organizations make five common mistakes when it comes to planning and implementing their application management strategy. This eBook tells you what they are and how to avoid them, and offers real-life case studies on customers who didn't …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds