Sample code for 30+ languages & platforms
Dart Requires Chilkat v11.0.0+

Compress Large Binary File in Blocks

See more Compression Examples

Compresses a large binary file in blocks.

Chilkat Dart Downloads

Dart
import 'dart:typed_data';

import 'package:chilkat/chilkat.dart';

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

  final facSrc = CkFileAccess();
  final facDest = CkFileAccess();

  // Open a large binary file for reading.
  try {
    facSrc.openForRead('qa_data/bmp/big.bmp');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

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

  // Open an output file for the compressed data.
  try {
    facDest.openForWrite('c:/temp/qa_output/compressedBmp.dat');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final compress = CkCompression();
  compress.algorithm = 'deflate';

  var fileBytes = Uint8List(0);
  var compressedBytes = Uint8List(0);

  // Assuming numBlocks > 1
  compress.firstChunk = true;
  compress.lastChunk = false;

  var i = 0;
  while (i < numBlocks) {
    fileBytes = facSrc.readBlock(i, blockSize);
    compressedBytes = compress.compressBytes(fileBytes);

    facDest.fileWrite(compressedBytes);

    i++;

    compress.firstChunk = false;
    if (i == (numBlocks - 1)) {
      compress.lastChunk = true;
    }
  }

  facSrc.fileClose();
  facDest.fileClose();

  print('Finished compressing file.');
}