Sample code for 30+ languages & platforms
Go

Transition from Compression.BeginCompressBytes to FirstChunk/LastChunk

Provides instructions for replacing deprecated BeginCompressBytes method calls with using FirstChunk and LastChunk properties.

Chilkat Go Downloads

Go
    success := false

    facSrc := chilkat.NewFileAccess()
    facDest := chilkat.NewFileAccess()

    // Open a large binary file for reading.
    success = facSrc.OpenForRead("qa_data/bmp/big.bmp")
    if success == false {
        fmt.Println(facSrc.LastErrorText())
        facSrc.DisposeFileAccess()
        facDest.DisposeFileAccess()
        return
    }

    // If we compress in 64K chunks, find out how many blocks there will be.
    blockSize := 65536
    numBlocks := facSrc.GetNumBlocks(blockSize)

    // Open an output file for the compressed data.
    success = facDest.OpenForWrite("c:/temp/qa_output/compressedBmp.dat")
    if success == false {
        fmt.Println(facDest.LastErrorText())
        facSrc.DisposeFileAccess()
        facDest.DisposeFileAccess()
        return
    }

    compress := chilkat.NewCompression()
    compress.SetAlgorithm("deflate")

    var fileBytes []byte
    var compressedBytes []byte

    // ----------------------------------------------------------------------------------
    // This is the deprecated way of compressing in chunks using Begin/More/End methods..
    // ----------------------------------------------------------------------------------
    i := 0
    for i < numBlocks {
        fileBytes = facSrc.ReadBlock(i,blockSize)
        if i == 0 {
            compressedBytes = compress.BeginCompressBytes(fileBytes)
        } else {
            compressedBytes = compress.MoreCompressBytes(fileBytes)
        }

        facDest.FileWrite(compressedBytes)

        i = i + 1
    }

    // At the very end, flush any remaining compressed bytes, if any.
    compressedBytes = compress.EndCompressBytes()
    facDest.FileWrite(compressedBytes)

    facSrc.FileClose()
    facDest.FileClose()

    fmt.Println("Finished compressing file.")

    // ----------------------------------------------------------------------------------
    // This is new way of compressing in chunks using FirstChunk and LastChunk properties
    // ----------------------------------------------------------------------------------

    success = facSrc.OpenForRead("qa_data/bmp/big.bmp")
    if success == false {
        fmt.Println(facSrc.LastErrorText())
        facSrc.DisposeFileAccess()
        facDest.DisposeFileAccess()
        compress.DisposeCompression()
        return
    }

    success = facDest.OpenForWrite("c:/temp/qa_output/compressedBmp2.dat")
    if success == false {
        fmt.Println(facDest.LastErrorText())
        facSrc.DisposeFileAccess()
        facDest.DisposeFileAccess()
        compress.DisposeCompression()
        return
    }

    // Assuming numBlocks > 1
    compress.SetFirstChunk(true)
    compress.SetLastChunk(false)

    i = 0
    for i < numBlocks {
        fileBytes = facSrc.ReadBlock(i,blockSize)
        compressedBytes = compress.CompressBytes(fileBytes)

        facDest.FileWrite(compressedBytes)

        i = i + 1

        compress.SetFirstChunk(false)
        if i == (numBlocks - 1) {
            compress.SetLastChunk(true)
        }

    }

    facSrc.FileClose()
    facDest.FileClose()

    fmt.Println("Finished compressing file 2.")

    facSrc.DisposeFileAccess()
    facDest.DisposeFileAccess()
    compress.DisposeCompression()