Exception in thread “main” java.util.zip.DataFormatException: en-tête incorrect vérifier
j'ai écrit une application en Java pour la compression et la décompression de la Chaîne à l'aide de Deflaor et Gonfleur. mais lorsque j'exécute le code ci-dessous je suis l'exception suivante. quelqu'un peut-il me dire en quelques solutions pour ce
Deflated String:x��Q�n�0��@>"C��E����3�,[
d����9��P������x�O�����hcy��L
�Ct��{~m�I:�$�%\HD+�I�
�NwG
Exception in thread "main" java.util.zip.DataFormatException: incorrect header check
at java.util.zip.Inflater.inflateBytes(Native Method)
at java.util.zip.Inflater.inflate(Inflater.java:223)
at java.util.zip.Inflater.inflate(Inflater.java:240)
at sample_ftp.Sample_ftp.main(Sample_ftp.java:70)
Java Result: 1
Mon code id ce
//Encode a String into bytes
String inputString = "Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Udta hi firoon in hawaon mein kahin Ya main jhool jaoon in ghataon mein kahin Ek kar doon aasmaan zameen Kaho yaaron kya karoon kya nahin Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar Tu hi bata Pehla nasha Pehla khumaar Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Usne baat ki kuchh aise dhang se Sapne de gaya vo hazaaron range ke Reh jaoon jaise main haar ke Aur choome vo mujhe pyaar se Pehla nasha Pehla khumaar Naya pyaar hai naya intezaar Kar loon main kya apna haal Aye dil-e-bekaraar Mere dil-e-bekaraar";
byte[] input = inputString.getBytes("UTF-8");
//Compress the bytes
byte[] output1 = new byte[100];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output1);
compresser.end();
System.out.println("Deflated String:"+new String(output1));
String str=new String(output1);
byte output2[]=str.getBytes("UTF-8");
//Decompress the bytes
Inflater decompresser = new Inflater();
decompresser.setInput(output2);
byte[] result = new byte[10000];
int resultLength = decompresser.inflate(result);
decompresser.end();
//Decode the bytes into a String
String outputString = new String(result, 0, resultLength, "UTF-8");
System.out.println("Deflated String:"+outputString);
OriginalL'auteur user3159579 | 2014-01-04
Vous devez vous connecter pour publier un commentaire.
Quelques problèmes avec votre code ici:
1) Votre hypothèse, c'est le Tableau d'Octets
output1
retourné avec déflateur peut être valideString
sans encodage valide évident à partir de votre code ici:Au lieu de cela, ne pas inutilement convertir les au revoir de la matrice de la représentation, mais passer directement comme:
decompresser.setInput(output1)
EDIT: Changé comme par la nouvelle exigence dans les commentaires
2) Vous définissez un vide tableau d'octets à votre
inflate
, ce qui aboutirait à une Chaîne vide (ici):3) Vous avez limité votre compressé taille de la mémoire tampon pour être 100; j'ai augmenté pour répondre aux besoins de l'ensemble de votre Chaîne de
Vous pouvez utiliser un tableau d'octets ici dérivée à partir de votre Chaîne ou le précédent tableau d'octets
Edit: Comme l'a souligné dans les commentaires, l'exigence est précisément pour obtenir le tableau d'octets en une Chaîne de caractères, donc de représenter des données Binaires dans un format de Chaîne de caractères Base64 schéma de codage va entrer en jeu, en modifiant le code à cet effet:
Code modifié:
De sortie:
.....
alors, êtes-vous d'obtenir une Chaîne de caractères OU un tableau d'octets à la
inflate
côté?je veux chaîne............
regarder le modifier maintenant, fondamentalement, si vous souhaitez représenter des données Binaires à la Chaîne, de l'encodage Base64 est le chemin à parcourir
Je souhaite que je pourrais donner votre réponse plus que 1 vote ! Je ne pense pas une seconde de la Base64 de codage/décodage. Cela a résolu mon problème. Je suis à l'aide de Gzip et pas Inflater, mais j'ai eu un problème similaire. Maintenant c'est résolu car j'ai utilisé un encodage Base64 sur le côté serveur et ensuite décodé sur le côté client.
OriginalL'auteur PopoFibo