DeflateStream dekomprimiert die Daten nicht (das erste Mal)

8

Also hier ist ein seltsames. Ich habe diese Methode, um eine Base64-codierte deflated Zeichenfolge zu nehmen und die ursprünglichen Daten zurückzugeben:

%Vor%

Dies gibt eine leere Zeichenfolge zurück, es sei denn Ich füge einen zweiten Aufruf zu ds.CopyTo(inflate) hinzu. (WTF?)

%Vor%

( Flush / Close / Dispose auf ds haben keine Auswirkung.)

Warum kopiert die DeflateStream 0 Bytes beim ersten Aufruf? Ich habe auch versucht, mit Read() zu loopen, aber es gibt auch beim ersten Aufruf null zurück und arbeitet dann beim zweiten.

Update: Hier ist die Methode, mit der ich Daten komprimiere. %Vor%     
josh3736 11.11.2010, 20:27
quelle

1 Antwort

7

Dies passiert, wenn die komprimierten Bytes unvollständig sind (d. h. nicht alle Blöcke sind ausgeschrieben).

Wenn ich Ihre Base64Compress mit der folgenden Dekomprimierungsmethode verwende, erhalte ich eine InvalidDataException mit der Nachricht 'Unbekannter Blocktyp'. Stream könnte beschädigt sein. '

Dekomprimieren

%Vor%

Beachten Sie, dass alles wie erwartet funktioniert, wenn Sie die folgende Komprimierungsmethode verwenden

%Vor%

Aktualisieren

Hoppla, töricht mich ... Sie können den Speicherstream erst dann entpacken, wenn Sie den DeflateStream entsorgt haben (da flush gerade nicht implementiert ist (und Deflate / GZip Datenblöcke komprimiert), wird der letzte Block nur bei close / dispose geschrieben.

Erneutes Schreiben als:

%Vor%     
Chris Baxter 11.11.2010, 20:56
quelle

Tags und Links