Compression Zlib à l'Aide de Dégonfler et de Gonfler les classes en Java

Je veux essayer d'utiliser le Dégonfler et à Gonfler les classes java.util.zip pour la compression zlib.

Je suis capable de compresser le code à l'aide de la Dégonfler, mais lors de la décompression, j'ai cette erreur -

Exception in thread "main" java.util.zip.DataFormatException: unknown compression method
    at java.util.zip.Inflater.inflateBytes(Native Method)
    at java.util.zip.Inflater.inflate(Inflater.java:238)
    at java.util.zip.Inflater.inflate(Inflater.java:256)
    at zlibCompression.main(zlibCompression.java:53)

Voici mon code jusqu'à présent -

import java.util.zip.*;
import java.io.*;
public class zlibCompression {
/**
* @param args
*/
public static void main(String[] args) throws IOException, DataFormatException {
//TODO Auto-generated method stub
String fname = "book1";
FileReader infile = new FileReader(fname);
BufferedReader in = new BufferedReader(infile);
FileOutputStream out = new FileOutputStream("book1out.dfl");
//BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
Deflater compress = new Deflater();
Inflater decompress = new Inflater();
String readFile = in.readLine();
byte[] bx = readFile.getBytes();
while(readFile!=null){
byte[] input = readFile.getBytes();
byte[] compressedData = new byte[1024];
compress.setInput(input);
compress.finish();
int compressLength = compress.deflate(compressedData, 0, compressedData.length);
//System.out.println(compressedData);
out.write(compressedData, 0, compressLength);
readFile = in.readLine();
}
File abc = new File("book1out.dfl");
InputStream is = new FileInputStream("book1out.dfl");
InflaterInputStream infl = new InflaterInputStream(new FileInputStream("book1out.dfl"), new Inflater());
FileOutputStream outFile = new FileOutputStream("decompressed.txt");
byte[] b = new byte[1024];
while(true){
int a = infl.read(b,0,1024);
if(a==0)
break;
decompress.setInput(b);
byte[] fresult = new byte[1024];
//decompress.in
int resLength = decompress.inflate(fresult);
//outFile.write(b,0,1);
//String outt = new String(fresult, 0, resLength);
//System.out.println(outt);
}
System.out.println("complete");
}
}
est que l'un des devoirs? une seule erreur est d'appeler terminer trop tôt, une autre est à l'aide de setInput w/o longueur et un de plus n'est pas de vérifier si le dégonfler processus a retourné plus de données que le 1024.

OriginalL'auteur Ashish Agarwal | 2011-05-30