Je cherche donc à décompresser une chaine avec la classe Inflater, voici mon bout de code :
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();
}
J'obtiens l'exception suivante :
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)
Ca a quelque chose a voir avec l'étape
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
String deflated = byteArray.toString();
puis
deflated.getBytes()
car si je passe directement byteArray.toByteArray() à l'Inflater, ca fonctionne...
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....