Chilkat HOME ASP Visual Basic VB.NET C# Visual C++ C MFC Delphi FoxPro Java Perl PHP Python Ruby SQL Server VBScript
|
PPMD Streaming String CompressionDemonstrates streaming string compression using PPMD. Data may be compressed in chunks by initially calling one of the BeginCompress* methods, followed by 0 or more calls to a MoreCompress* method, and terminating with a call to an EndCompress* method. Likewise, data may be decompressed by calling a BeginDecompress* method, followed by 0 or more MoreDecompress* calls, and ending with an EndDecompress* method call. This example demonstrates string-to-string compression and decompression in chunks.
#include <CkCompression.h> #include <CkString.h> void ChilkatSample(void) { CkCompression compress; // Any string argument automatically begins a 30-day trial. bool success; success = compress.UnlockComponent("30-day trial"); if (success != true) { printf("Compression component unlock failed\n"); return; } compress.put_Algorithm("ppmd"); compress.put_Charset("ansi"); compress.put_EncodingMode("base64"); CkString strData; long i; CkString strCompressed; // Create a long string to compress. strData = "abcdefg1122334455667788"; strData.append("\r\n"); // Note: BeginCompressStringENC may return a zero-length // string. This is normal if the input is buffered and no // compressed data is yet available. // However, a null reference indicates an error -- which is // generally only possible if the component was never unlocked. strCompressed = compress.beginCompressStringENC(strData); // Compress 100 more chunks of data. Each call to // MoreCompressStringENC may or may not produce additional // compressed output. for (i = 0; i <= 99; i++) { strData = "abcdefg1122334455667788"; strData.append("\r\n"); strCompressed.append(compress.moreCompressStringENC(strData)); } // Finalize the compression with a single call to EndCompressStringENC: strCompressed.append(compress.endCompressStringENC()); // Display the compressed string. // The result will be: // ec8YZ5vk9za18d0plwuV7R65em9OZge9gJXht/QAAAAAAAAAABNOZQAAKw== printf("%s\n",(const char *)strCompressed); // Decompress back to the original in a single call. CkString strOriginal; strOriginal = compress.decompressStringENC(strCompressed); // Display the uncompressed original: printf("--- Original ---\n"); printf("%s\n",(const char *)strOriginal); // Decompress in multiple calls. It doesn't matter how the // compressed data is split -- it could be fed to the decompressor // one char at a time if desired. const char * chunk1; chunk1 = "ec8YZ5vk9za1"; const char * chunk2; chunk2 = "8d0p"; const char * chunk3; chunk3 = "lwuV7R65em9OZge9gJXht/QAAAA"; const char * chunk4; chunk4 = "AAAAAABNOZQAAKw=="; strOriginal = ""; strOriginal = compress.beginDecompressStringENC(chunk1); strOriginal.append(compress.moreDecompressStringENC(chunk2)); strOriginal.append(compress.moreDecompressStringENC(chunk3)); strOriginal.append(compress.moreDecompressStringENC(chunk4)); strOriginal.append(compress.endDecompressStringENC()); // Display the uncompressed original after decompressing in chunks: printf("--- Original after Decompressing from Chunks ---\n"); printf("%s\n",(const char *)strOriginal); } |
Need a specific example? Send a request to support@chilkatsoft.com
© 2000-2008 Chilkat Software, Inc. All Rights Reserved.