Décompression d'un flux GZIPé
Publié le 23/01/2018 [Delphi] [Compression]Il est assez frustrant de tomber sur une erreur aussi peu explicite que "data error" quand on cherche à décompresser un flux avec TZDecompressionStream.
Ce que l'aide en ligne ne précise pas, c'est que le paramètre
La valeur de
Moralité, pour décompresser un flux GZIP (commençant par
Ce que l'aide en ligne ne précise pas, c'est que le paramètre
WindowBits
permet de spécifier que le flux possède une entête GZIP. Cette entête est facile à identifier, elle commence par la séquence $1F $8B
alors que TZCompressionStream
produira une entête ZLIB $78 $9C
par exemple.La valeur de
WindowBits
doit être comprise entre 8 et 15 avec 15 pour le meilleur taux de compression, mais si vous ajouter 16 à cette valeur, ZLib gérera l'entête GZIP.Moralité, pour décompresser un flux GZIP (commençant par
$1F $8B
) il faut créer le flux comme ceci GZ := TZDecompressionStream.Create(Source, 31);