[][src]Function zstd_sys::ZSTD_getBlockSize

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

Block functions produce and decode raw zstd blocks, without frame metadata. Frame metadata cost is typically ~12 bytes, which can be non-negligible for very small blocks (< 100 bytes). But users will have to take in charge needed metadata 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, consider using regular ZSTD_compress() instead. Frame metadata is not that costly, and quickly becomes negligible as source size grows larger than a block.
  • When a block is considered not compressible enough, ZSTD_compressBlock() result will be 0 (zero) ! ===> In which case, nothing is produced into dst !
  • User must test for such outcome and deal directly with uncompressed data
  • A block cannot be declared incompressible if ZSTD_compressBlock() return value was != 0. Doing so would mess up with statistics history, leading to potential data corruption.
  • 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.