Go
Go
Decompress Large Binary File in Blocks
See more Compression Examples
Decompresses a large binary file in blocks.Chilkat Go Downloads
success := false
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
facSrc := chilkat.NewFileAccess()
facDest := chilkat.NewFileAccess()
// Open a previously compressed file for decompressing.
// See Compress Large File in Blocks
success = facSrc.OpenForRead("c:/temp/qa_output/compressedBmp.dat")
if success == false {
fmt.Println(facSrc.LastErrorText())
facSrc.DisposeFileAccess()
facDest.DisposeFileAccess()
return
}
// If we compress in 32K chunks, find out how many blocks there will be.
blockSize := 32768
numBlocks := facSrc.GetNumBlocks(blockSize)
// Open an output file for the decompressed data.
success = facDest.OpenForWrite("c:/temp/qa_output/decompressed.bmp")
if success == false {
fmt.Println(facDest.LastErrorText())
facSrc.DisposeFileAccess()
facDest.DisposeFileAccess()
return
}
compress := chilkat.NewCompression()
compress.SetAlgorithm("deflate")
var decompressedBytes []byte
var compressedBytes []byte
// Assuming numBlocks > 1
compress.SetFirstChunk(true)
compress.SetLastChunk(false)
i := 0
for i < numBlocks {
compressedBytes = facSrc.ReadBlock(i,blockSize)
decompressedBytes = compress.DecompressBytes(compressedBytes)
facDest.FileWrite(decompressedBytes)
i = i + 1
compress.SetFirstChunk(false)
if i == (numBlocks - 1) {
compress.SetLastChunk(true)
}
}
facSrc.FileClose()
facDest.FileClose()
fmt.Println("Finished decompressing file.")
facSrc.DisposeFileAccess()
facDest.DisposeFileAccess()
compress.DisposeCompression()