Je cherche donc à décompresser une chaine avec la classe Inflater, voici mon bout de code :
J'obtiens l'exception suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 String p_message = "Un truc à compresser"; ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); Deflater deflater = new Deflater(Deflater.DEFLATED,true); DeflaterOutputStream def = new DeflaterOutputStream(byteArray, deflater); def.write(p_message.getBytes()); def.close(); byteArray.close(); String deflated = byteArray.toString(); Inflater inflater = new Inflater(true); inflater.setInput(deflated.getBytes()); byte[] b = new byte[100]; int nbbyte = 0; try { nbbyte = inflater.inflate(b); } catch (RuntimeException e) { e.printStackTrace(); }
Ca a quelque chose a voir avec l'étape
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Exception in thread "main" java.util.zip.DataFormatException: invalid distance code at java.util.zip.Inflater.inflateBytes(Native Method) at java.util.zip.Inflater.inflate(Unknown Source) at java.util.zip.Inflater.inflate(Unknown Source)
car si je passe directement byteArray.toByteArray() à l'Inflater, ca fonctionne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 String deflated = byteArray.toString(); puis deflated.getBytes()
Le problème c'est que dans mon programme, entre la compression et la décompression j'ai besoin d'avoir l'objet sous forme d'un String....
Partager