Ich hab da ein Problem mit JZLib bzw. generell mit ZLib.
Ich hab hier eine Datei 8000-L049.pck, die mit ZLib komprimiert wurde.
Entweder mache ich irgendetwas falsch oder es funktioniert nicht mit der Java Version von ZLib, um Dateien zu dekomprimieren.
Das eingebaute ZLib in Java (java.util.zip.Inflater) habe ich auch schon erfolglos verwendet.
Die komprimierte Datei (.pck): http://dl.dropbox.com/u/44975779/8000-L049.pck
Die dekomprimierte Datei (.xml): http://dl.dropbox.com/u/44975779/8000-L049.xml
Hier mal meine Testversuche.
Zuerst habe ich es mit dem eingebauten Inflater versucht:
Als Exception erhalte ich eine DataFormatException:
Und die erstellte .xml Datei hat 0 Bytes.
Dann habe ich mal auf JZLib zurückgegriffen und auch zwei erfolglose Tests versucht.
Ausgegeben wird 512 2, also sind 512 Bytes im ZInputStream, es werden aber nur 2 Bytes rausgeschrieben. Warum auch immer.
Die erstellte .xml Datei hat auch wieder 0 Bytes.
Der zweite Versuch:
Konsole gibt folgendes aus:
Die erstellt .xml hat auch wieder 0 Bytes.
Ich hab hier eine Datei 8000-L049.pck, die mit ZLib komprimiert wurde.
Entweder mache ich irgendetwas falsch oder es funktioniert nicht mit der Java Version von ZLib, um Dateien zu dekomprimieren.
Das eingebaute ZLib in Java (java.util.zip.Inflater) habe ich auch schon erfolglos verwendet.
Die komprimierte Datei (.pck): http://dl.dropbox.com/u/44975779/8000-L049.pck
Die dekomprimierte Datei (.xml): http://dl.dropbox.com/u/44975779/8000-L049.xml
Hier mal meine Testversuche.
Zuerst habe ich es mit dem eingebauten Inflater versucht:
Java:
package zip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;
public class ZLib
{
public static void main(String[] args) throws IOException, DataFormatException
{
File file = new File("8000-L049.pck");
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file + ".xml");
Inflater decompressor = new Inflater();
byte[] data = new byte[(int)file.length()];
fis.read(data);
fis.close();
decompressor.setInput(data);
int test = decompressor.inflate(data);
System.out.println(test);
for (int i = 0; i < data.length; i++)
{
fos.write(data[i]);
}
fos.close();
}
}
Als Exception erhalte ich eine DataFormatException:
Java:
Exception in thread "main" java.util.zip.DataFormatException: incorrect header check
at java.util.zip.Inflater.inflateBytes(Native Method)
at java.util.zip.Inflater.inflate(Unknown Source)
at java.util.zip.Inflater.inflate(Unknown Source)
at zip.ZLib.main(ZLib.java:24)
Dann habe ich mal auf JZLib zurückgegriffen und auch zwei erfolglose Tests versucht.
Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import com.jcraft.jzlib.*;
public class Test_PCK
{
@SuppressWarnings({ "deprecation" })
public static void main(String[] args) throws IOException
{
File file = new File("8000-L049.pck");
FileInputStream fis = new FileInputStream(file);
ZInputStream zis = new ZInputStream(fis, JZlib.Z_PARTIAL_FLUSH);
FileOutputStream fos = new FileOutputStream(file + ".xml");
byte[] data = new byte[(int)file.length()];
byte[] buffer = new byte[1024 * 16];
zis.read(buffer);
System.out.println(zis.getTotalIn() + " " + zis.getTotalOut());
for (int i = 0; i < data.length; i++)
{
fos.write(buffer[i]);
}
}
}
Die erstellte .xml Datei hat auch wieder 0 Bytes.
Der zweite Versuch:
Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import com.jcraft.jzlib.*;
public class Test_PCK2
{
@SuppressWarnings("deprecation")
public static void main(String[] args) throws IOException
{
File file = new File("8000-L049.pck");
FileInputStream fis = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(file + ".xml");
byte[] buffer = new byte[1024 * 5];
fis.read(buffer);
Inflater decompressor = new Inflater();
System.out.println("Größe Buffer: " + buffer.length + " bytes");
decompressor.setInput(buffer);
System.out.println("Input: " + decompressor.getAvailIn() + " bytes");
int i = decompressor.inflate(JZlib.Z_FULL_FLUSH);
System.out.println("Output: " + i + " bytes");
fos.write(buffer, 0, buffer.length);
}
}
Java:
Größe Buffer: 5120 bytes
Input: 5120 bytes
Output: -3 bytes