pub unsafe extern "C" fn ZSTD_getBlockSize(
    cctx: *const ZSTD_CCtx
) -> usize
Expand description

Block functions produce and decode raw zstd blocks, without frame metadata. Frame metadata cost is typically ~18 bytes, which can be non-negligible for very small blocks (< 100 bytes). User will have to take in charge required information to regenerate data, such as compressed and content sizes.

A few rules to respect :

  • Compressing and decompressing require a context structure
  • Use ZSTD_createCCtx() and ZSTD_createDCtx()
  • It is necessary to init context before starting
  • compression : any ZSTD_compressBegin*() variant, including with dictionary
  • decompression : any ZSTD_decompressBegin*() variant, including with dictionary
  • copyCCtx() and copyDCtx() can be used too
  • Block size is limited, it must be <= ZSTD_getBlockSize() <= ZSTD_BLOCKSIZE_MAX == 128 KB
  • If input is larger than a block size, it’s necessary to split input data into multiple blocks
  • For inputs larger than a single block, really consider using regular ZSTD_compress() instead. Frame metadata is not that costly, and quickly becomes negligible as source size grows larger.
  • When a block is considered not compressible enough, ZSTD_compressBlock() result will be zero. In which case, nothing is produced into dst !
  • User must test for such outcome and deal directly with uncompressed data
  • ZSTD_decompressBlock() doesn’t accept uncompressed data as input !!!
  • In case of multiple successive blocks, should some of them be uncompressed, decoder must be informed of their existence in order to follow proper history. Use ZSTD_insertBlock() for such a case.