Décompresser des données en mémoire

Problème

Vous souhaitez lire des données qui sont compressées et en mémoire.

Solution

Avec zlib, utilisez uncompress(). Avec libbzip2, utilisez BZ2_bzBuffToBuffDecompress().

Discussion

La fonction uncompress() fonctionne comme son opposée compress() avec ses quatre arguments.

La fonction BZ2_bzBuffToBuffDecompress() prend six arguments. Les quatre premiers sont les mêmes que ceux de uncompress(). Les deux suivants sont les mêmes que les deux derniers arguments de BZ2_bzReadOpen(), vue dans la première recette de ce chapitre. Voici en exemple les fonctions inverses à celles de la recette précédente :


char * 
gz_alloc_and_uncompress (char *data, int len) 
{ 
  int err; 
  int result_len = len * 10; 
  int real_result_len; 
  char *result; 
  if (NULL == (result = malloc (result_len * sizeof *result))) 
    return (NULL); 
  err = uncompress (result, &real_result_len, data, len); 
  while (Z_BUF_ERROR == err) 
    { 
      result_len += len; 
      if (NULL == 
          (result == realloc (result, result_len * sizeof *result))) 
        return (NULL); 
      err = uncompress (result, &real_result_len, data, len); 
    } 
 
  if (err != Z_OK) 
    { 
      free (result); 
      return (NULL); 
    } 
  return (realloc (result, ((real_result_len) * sizeof *result))); 
} 

char * 
bz2_alloc_and_uncompress (char *data, int len) 
{ 
  int err; 
  int result_len = len * 10; ...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Compresser des données en mémoire
Suivant
Décompresser un fichier tar.gz ou tar.bz2