Sample code for 30+ languages & platforms
DataFlex

Compress Text Feed to Binary

See more Compression Examples

This example receives incoming text data in chunks, compresses as a stream, and accumulates the compressed binary data.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Variant vBdCompressed
    Handle hoBdCompressed
    Handle hoCompress
    Variant vSbUncompressedChunk
    Handle hoSbUncompressedChunk
    Integer i
    Variant vBdDecompressed
    Handle hoBdDecompressed
    String sOriginalText
    String sTemp1

    Move False To iSuccess

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatBinData)) To hoBdCompressed
    If (Not(IsComObjectCreated(hoBdCompressed))) Begin
        Send CreateComObject of hoBdCompressed
    End

    Get Create (RefClass(cComChilkatCompression)) To hoCompress
    If (Not(IsComObjectCreated(hoCompress))) Begin
        Send CreateComObject of hoCompress
    End
    Set ComAlgorithm Of hoCompress To "deflate"
    Set ComCharset Of hoCompress To "utf-8"

    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbUncompressedChunk
    If (Not(IsComObjectCreated(hoSbUncompressedChunk))) Begin
        Send CreateComObject of hoSbUncompressedChunk
    End

    Set ComFirstChunk Of hoCompress To True
    Set ComLastChunk Of hoCompress To False

    For i From 0 To 24
        If (i = 24) Begin
            Set ComLastChunk Of hoCompress To True
        End

        Send ComClear To hoSbUncompressedChunk
        Get ComAppendInt Of hoSbUncompressedChunk i To iSuccess
        Get ComAppend Of hoSbUncompressedChunk ": This is a line of data to be compressed..." + (character(13)) + (character(10)) To iSuccess

        Get pvComObject of hoSbUncompressedChunk to vSbUncompressedChunk
        Get pvComObject of hoBdCompressed to vBdCompressed
        Get ComCompressSb Of hoCompress vSbUncompressedChunk vBdCompressed To iSuccess

        Set ComFirstChunk Of hoCompress To False
    Loop

    // Show the compressed data in hex format:
    Showln "The hex encoded compressed text:"
    Get ComGetEncoded Of hoBdCompressed "hex" To sTemp1
    Showln sTemp1

    // Now decompress in one call.  It is important to set both FirstChunk and LastChunk = True
    Get Create (RefClass(cComChilkatBinData)) To hoBdDecompressed
    If (Not(IsComObjectCreated(hoBdDecompressed))) Begin
        Send CreateComObject of hoBdDecompressed
    End
    Set ComFirstChunk Of hoCompress To True
    Set ComLastChunk Of hoCompress To True
    Get pvComObject of hoBdCompressed to vBdCompressed
    Get pvComObject of hoBdDecompressed to vBdDecompressed
    Get ComDecompressBd2 Of hoCompress vBdCompressed vBdDecompressed To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoCompress To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComGetString Of hoBdDecompressed "utf-8" To sOriginalText
    Showln sOriginalText


End_Procedure