DeflatorInputStream und DeflatorOutputStream rekonstruieren die ursprünglichen Daten nicht

8

Ich möchte einige Daten komprimieren, also stieß ich auf DeflatorInputStream & amp; DeflatorOutputStream-Klassen. Das folgende Beispiel zeigt jedoch, dass ich meine ursprünglichen Daten nicht rekonstruieren kann, wenn ich diese Klassen verwende.

Wenn ich zu ZipInputStream und ZipOutputStream übergehe, funktioniert es zwar, aber da ich keine Zip-Dateien per se brauche, dachte ich, dass eine generische Komprimierung besser wäre. Hauptsächlich interessiert mich, warum dieses Beispiel nicht funktioniert.

%Vor%     
DieterDP 01.04.2013, 10:53
quelle

2 Antworten

13

Historischer Präzedenzfall. Unter Unix wird die Funktion zum Rückgängigmachen einer deflate als inflate bezeichnet. Im Gegensatz zu vielen anderen Java IO-Klassen hat das Eingabe- und Ausgabestream-Paar keine (offensichtlich) übereinstimmenden Namen.

DeflaterOutputStream ermöglicht es Ihnen nicht, eine Deflation umzukehren, sondern deflationiert Bytes, wenn sie von einer Senke an eine Quelle übergeben werden. DeflaterInputStream auch wird deflationiert, aber es führt seine Aktion als Datenfluss von der Quelle zur Senke aus.

Um Ihre Daten im unkomprimierten (überhöhten) Format zu lesen, müssen Sie ein InflaterInputStream :

verwenden %Vor%

Da es außerdem möglich ist, nicht alle komprimierten Daten aus dem Stream in einem read -Aufruf zu erhalten, müssen Sie eine Schleife verwenden. Etwas wie das:

%Vor%

Stellen Sie abschließend sicher, dass Sie den deflaterierten Ausgabestrom vor dem Abrufen der komprimierten Bytes leeren (oder alternativ den Stream schließen).

    
Perception 01.04.2013, 11:37
quelle
1

Es gibt nur zwei kleine Änderungen, die Ihren Code funktionieren lassen.

%Vor%

Zuerst müssen Sie den Ausgabestream schließen () . Der Deflator muss einige abschließende Schritte unternehmen, um seine Arbeit abzuschließen.

%Vor%

Wenn Sie einen Deflator InputStream verwenden, komprimieren Sie die komprimierten Daten erneut. Ersetzen Sie es durch einen Inflator InputStream und Ihr Code funktioniert einwandfrei.

    
AleX 01.04.2013 11:38
quelle

Tags und Links