DeflatorInputStream und DeflatorOutputStream rekonstruieren nicht die ursprünglichen Daten

Ich möchte einige Daten komprimieren und bin daher auf die DeflatorInputStream- und DeflatorOutputStream-Klassen gestoßen. Das folgende Beispiel zeigt jedoch, dass ich meine ursprünglichen Daten bei Verwendung dieser Klassen scheinbar nicht rekonstruieren kann.

Wenn ich zu ZipInputStream und ZipOutputStream wechsle, funktioniert das, aber da ich keine Zip-Dateien per se benötige, dachte ich, eine generische Komprimierung wäre besser. Ich bin hauptsächlich daran interessiert zu verstehen, warum dieses Beispiel nicht funktioniert.

//Create some "random" data
int bytesLength = 1024;
byte[] bytes = new byte[bytesLength];
for(int i = 0; i < bytesLength; i++) {
     bytes[i] = (byte) (i % 10);
}

//Compress the data, and write it to somewhere (a byte array for this example)
ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
DeflaterOutputStream outputStream = new DeflaterOutputStream(arrayOutputStream);
outputStream.write(bytes);

//Read and decompress the data
byte[] readBuffer = new byte[5000];
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());
DeflaterInputStream inputStream = new DeflaterInputStream(arrayInputStream);
int read = inputStream.read(readBuffer);

//Should hold the original (reconstructed) data
byte[] actuallyRead = Arrays.copyOf(readBuffer, read);

//Results differ - will print false
System.out.println(Arrays.equals(bytes, actuallyRead));

Antworten auf die Frage(2)

Ihre Antwort auf die Frage