Différences de compression GZIP dans Java et Go
Lors de la compression de données à l'aide de GZIP dans Java et Go, les utilisateurs peuvent rencontrer des résultats variables. Cet article étudie les causes sous-jacentes et propose des solutions pour obtenir des sorties similaires.
DICACTION DE TYPE DE DONNÉES
La raison principale de la disparité réside dans les types de données distincts utilisés pour représenter octets dans ces langues. Java utilise des octets signés allant de -128 à 127, tandis que Go utilise des octets non signés (Uint8) avec une plage de 0 à 255. Cette différence nécessite une conversion de valeurs d'octets Java négatives en ajoutant 256.
Variation du niveau de compression
Même avec les ajustements de valeur d'octets, les résultats différents pourraient persister en raison des variations du niveau de compression par défaut entre ces langues. Bien que Java et Go utilisent initialement la compression de niveau 6, cette valeur n'est pas standardisée et les implémentations peuvent s'écarter. et les algorithmes LZ77 pour compresser les données. Ces techniques reposent sur les fréquences de caractères d'entrée pour attribuer des codes de sortie, introduisant un potentiel de variances dans les séquences de sortie, même avec des niveaux de compression identiques.
Élimination des différences de sortie
pour obtenir identiques Sorties, les utilisateurs peuvent définir le niveau de compression sur 0 (pas de compression) dans Java et GO. Dans Java, cela peut être réalisé en définissant Def.SetLevel (Deflater.no_Compression), tandis qu'à Go, il s'agit d'utiliser gzip.newwriterlevel (& buf, gzip.nocompression). ]
Pour afficher les valeurs d'octets Java dans un format non signé, les utilisateurs peuvent utiliser ByteValue & 0xFF. Alternativement, l'affichage des valeurs sous forme hexadécimale contourne les préoccupations concernant la signature.
considérations supplémentaires
gzip permet l'inclusion de champs d'en-tête dans sa sortie. GO intègre ces champs via le type de tête gzip.Deader, tandis que Java les omet. Pour générer des sorties exactes, les utilisateurs peuvent utiliser des bibliothèques GZIP tierces pour Java qui permettent la manipulation du champ d'en-tête, telles que Apache Commons Compress.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3