Compresser des données en mémoire

Problème

Vous disposez de données en mémoire que vous souhaitez compresser.

Solution

Utilisez compress2() si votre préférence va à zlib, ou BZ2_bzBuffToBuffCompress si vous préférez libbzip2.

Discussion

Si vous utilisez zlib, la fonction à utiliser est compress2() dont les arguments sont un espace mémoire pré-alloué pour y placer le résultat, un pointeur vers un entier qui contiendra la taille des données compressées, puis un pointeur vers les données à compresser suivi de leur taille, et en cinquième argument, le niveau de compression, entre 0 (pas de compression) et 9 (compression la meilleure possible). La taille du tampon à pré-allouer doit être d’une taille un peu supérieure à la taille des données initiales, même si après compression, la taille des données sera moindre. La formule de calcul de la taille du tampon à pré-allouer est la suivante : <longueur de la source> + <longueur de la source> * 0.1% + 12. Prenons un exemple :


int 
gz_alloc_and_compress (char **result, int *result_len, char *string) 
{ 
  int len = strlen (string); 
  int err; 
  char *buffer; 
  if (NULL == 
      (buffer = malloc ((len * 1001 / 1000 + 12) * sizeof *buffer))) 
    return (-1); 
  err = compress2 (buffer, result_len, string, len, 9); 
  if (err != Z_OK) 
    { 
      free (buffer); 
      return...
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
Écrire un fichier compressé
Suivant
Décompresser des données en mémoire