Pessoal,
To apanhando aqui com a classe Inflater para descomprimir strings, tenho um programa em VB que comunica via socket com meu programa em java, leio os dados do socket, guardo numa String e tento descomprimir. O problema é que nesse momento que jogo pra dentro de uma String acontece alguma coisa com o array de bytes que não deixa o Inflater descomprir, ele lança a seguinte exception: java.util.zip.DataFormatException: invalid distance code.
Alguém já trabalho com esse Inflater?? fazendo testes aqui eu achei muito estranho, pq cada hora que mudo a mensagem ele dá um erro diferente, dependendo da mensagem ele descomprime de boa, outra hora ele dá “Data check error”, naum consegui entender a lógica desse negócio.
Segue abaixo o código pra ver se alguém consegue dar uma luz.
Vlwww…
import java.util.zip.Deflater;
import java.util.zip.Inflater;
public class Estudo {
public static void main(String[] args) {
try {
// a mensagem que recebo do cliente VB é parecida com essa
String inputString = "SQL" + (char)11 + "10" + (char)11 + "1234-1234-1234-1234" + (char)11 + "BSB-DSV-35" + (char)1;
// pega o array de bytes
byte[] input = inputString.getBytes();
System.out.println("msg enviada-->" + inputString);
// buffer
byte[] output = new byte[2000];
Deflater compresser = new Deflater();
compresser.setInput(input);
compresser.finish();
int compressedDataLength = compresser.deflate(output);
// o problema acontece aki, quando passo o array output direto pra ser descomprimido ele funciona, quando
// crio uma string e depois pego o array de bytes com getBytes() ele dá erro
String msg = new String(output, 0, compressedDataLength);
System.out.println("msg comprimida-->" + msg);
// pega o array de bytes
byte[] msgCliente = msg.getBytes();
// buffer pra descomprimir
byte[] result = new byte[2000];
// descomprimindo
Inflater decompresser = new Inflater();
decompresser.setInput(msgCliente, 0, compressedDataLength);
int resultLength = decompresser.inflate(result);
decompresser.end();
// criando string de saida
String outputString = new String(result, 0, resultLength);
System.out.println("msg recebida-->" + outputString + "<--");
} catch (java.util.zip.DataFormatException ex) {
ex.printStackTrace();
}
}
}