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

  • Enterprises are increasingly looking to platform as a service (PaaS) to lower their costs and speed their time to market for new applications. Developing, deploying, and managing applications in the cloud eliminates the time and expense of managing a physical infrastructure to support them. PaaS offerings must deliver additional long-term benefits, such as a lower total cost of ownership (TCO), rapid scalability, and ease of integration, all while providing robust security and availability. This report …

  • Anthony Christie, the Chief Marketing Officer for Level Communications, is responsible for customer experience, worldwide marketing and product management. In this informative asset, he shares his insights into why a private network connection to cloud-bases applications is the right decision for your enterprise. Download now to find out more.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date