Boa tarde a todos.
Eu estou participando de um projeto, aqui no TRF, desenvolvendo uma pesquisa para consulta de processos. Os dados são inseridos no banco ( CA-Ingres) por uma aplicação Delphi, até ai sem problemas, porém alguem teve uma ideia brilhante de usar a ZLIB para compactar um campo onde se digita um texto longo, e guarda isso em um campo do tipo binary. Bom recuperar esses dados não é o problema. O problema é que eu não estou conseguindo usar a ZLIB do Java para descompactar os dados de um arquivo que eu compactei usando a ZLIB java … Existe um conjunto de classes chamado JZLIB, mas nao tem documentação.
Vou postar aqui o código que eu fiz para compactar e descompactar. A compactação esta funcionando aparentemente, porem quando tente descompatar; aqui no trabalho, esta estourando uma exception OutofMemory, em casa a exception é DataFormatException.
Se alguem já usou essa lib e puder me dar uma ajuda, fico muito grato.
abraços.
Ronaldo.
File f = new File("c://binario/teste.txt");
FileInputStream fin = new FileInputStream(f);
Deflater compressor = new Deflater();
compressor.setLevel(Deflater.BEST_COMPRESSION);
byte readByte;
byte[] in = new byte[(int) f.length()];
System.out.println(f.length());
int i = 0;
StringBuffer sb = new StringBuffer();
while ((readByte = (byte) fin.read()) != -1) {
sb.append(String.valueOf((char) readByte));
in[i++] = readByte;
}
fin.close();
System.out.println(sb.toString());
compressor.setInput(in);
compressor.finish();
ByteArrayOutputStream bos = new ByteArrayOutputStream(in.length);
byte[] buf = new byte[1024];
while (!compressor.finished()) {
int count = compressor.deflate(buf);
bos.write(buf, 0, count);
}
try {
bos.close();
} catch (IOException e) {
e.printStackTrace() ;
}
// Get the compressed data
byte[] compressedData = bos.toByteArray();
try {
f = new File("c://binario/teste.zip");
FileOutputStream out = new FileOutputStream(f);
out.write(compressedData);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
// Descompactar ....
// abrir o zip ...
fin = new FileInputStream(f);
in = new byte[(int) f.length()];
System.out.println(f.length());
i = 0;
while ((readByte = (byte) fin.read()) != -1) {
in[i++] = readByte;
}
fin.close();
Inflater decompressor = new Inflater();
decompressor.setInput(in,0,in.length);
bos = new ByteArrayOutputStream(in.length);
buf = new byte[1024];
while (!decompressor.finished()) {
try {
int count = decompressor.inflate(buf);
bos.write(buf, 0, count);
} catch (DataFormatException e) {
e.printStackTrace() ;
}
}
try {
bos.close();
} catch (IOException e) {
e.printStackTrace() ;
}
// Get the decompressed data
byte[] decompressedData = bos.toByteArray();
try {
f = new File("c://binario/teste_out.txt");
FileOutputStream out = new FileOutputStream(f);
out.write(decompressedData);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}