Warum brauche ich zwei Aufrufe, um CopyTo zu streamen?

9

Ich habe die folgende Methode und aus irgendeinem Grund scheint der erste Aufruf zum Kopieren zu nichts zu tun? Wer weiß warum? Die Eingabe in die Methode ist komprimiert und Base64 kann diese Methode bei Bedarf liefern.

%Vor%     
Dan H 09.08.2010, 12:41
quelle

4 Antworten

2

Wenn der erste Aufruf von Read () 0 zurückgibt, wird auch Stream.CopyTo () nicht funktionieren. Obwohl dies auf ein Problem mit GZipStream hinweist, ist es unwahrscheinlich, dass es einen Fehler wie diesen hat. Viel wahrscheinlicher ist, dass beim Erstellen der komprimierten Daten etwas schief gelaufen ist. Zum Beispiel das Komprimieren von 0 Bytes gefolgt von der Komprimierung der realen Daten.

    
Hans Passant 09.08.2010, 14:42
quelle
2

Nur eine Vermutung, aber liegt es daran, dass der neue GZipStream -Konstruktor den Index am Ende des Arrays verlässt und der erste CopyTo ihn auf den Anfang zurücksetzt, so dass, wenn Sie den zweiten CopyTo aufrufen jetzt am Anfang und kopiert die Daten richtig?

    
w69rdy 09.08.2010 12:58
quelle
1

Wie sicher bist du, dass die erste Kopie nichts tut und die zweite funktioniert , das wäre ein Fehler in der Klasse GZipStream . Ihr Code sollte gut funktionieren, ohne CopyTo zweimal aufzurufen.

    
Ben Robinson 09.08.2010 13:02
quelle
0

Hallo, vielen Dank für die Beiträge von allen. Es stellt sich heraus, dass der Fehler durch einen Fehler in der Codierungsmethode verursacht wurde. Die Methode war

%Vor%

Die Rückführungslinie sollte unter der Verwendung liegen, die es dem Komprimierungsstrom erlaubt, zu schließen und zu leeren, dies verursachte das inkonsistente Verhalten beim Dekomprimieren des Stroms.

%Vor%

Danke für die Hilfe aller.

    
Dan H 10.08.2010 15:06
quelle

Tags und Links