DeflateStream funktioniert nicht mit MemoryStream?

8

Ich habe das folgende Stück Code:

%Vor%

Die Sache ist, dass resultStream immer leer ist!

Was mache ich hier falsch?

    
Leonardo 30.08.2013, 19:24
quelle

3 Antworten

9

Stellen Sie Ihre Verifikations-WriteLine außerhalb des Using. Die Puffer wurden noch nicht gespült.

%Vor%

Und nebenbei, Sie brauchen nicht alle diese ToString() s in einer Schreibleiste.

PS: Alles, was ein BinaryFormatter mit einem String tut, schreibt die Bytes mit Längenpräfix. Wenn Sie das Präfix (meine Vermutung) nicht benötigen, könnte es werden:

%Vor%

Das Umgekehrte ist genauso einfach, aber Sie benötigen eine Schätzung der maximalen Länge, um den Lesepuffer zu erstellen:

%Vor%     
Henk Holterman 30.08.2013, 19:30
quelle
7
___ qstntxt ___

Ich habe das folgende Stück Code:

%Vor%

Die Sache ist, dass DeflateStream immer leer ist!

Was mache ich hier falsch?

    
___ answer18540213 ___

Stellen Sie Ihre Verifikations-WriteLine außerhalb des Using. Die Puffer wurden noch nicht gespült.

%Vor%

Und nebenbei, Sie brauchen nicht alle diese resultStream s in einer Schreibleiste.

PS: Alles, was ein BinaryFormatter mit einem String tut, schreibt die Bytes mit Längenpräfix. Wenn Sie das Präfix (meine Vermutung) nicht benötigen, könnte es werden:

%Vor%

Das Umgekehrte ist genauso einfach, aber Sie benötigen eine Schätzung der maximalen Länge, um den Lesepuffer zu erstellen:

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ qstnhdr ___ DeflateStream funktioniert nicht mit MemoryStream? ___ tag123serialization ___ Serialisierung ist der Prozess, mit dem Datenstrukturen in ein Format konvertiert werden, das leicht gespeichert oder übertragen und anschließend rekonstruiert werden kann. ___ tag123memorystream ___ Ein Speicherstream ist eine Art Stream, der mehrere Methoden zum Zugriff auf und Speichern von Daten im Speicher hat. ___ answer28431037 ___

Von der ursprünglichen Antwort (Ich habe nicht genügend Credits, um ablehnen zu können)

  

Setzen Sie Ihr Steuerelement WriteLine außerhalb der Verwendung

Dies ist unvollständig und irreführend . DeflateStream schließt den zugrunde liegenden resultStream sobald DeflateStream den Gültigkeitsbereich verlässt. Daher wirft resultStream.Length

%Vor%

Thomas Levesque ist korrekt = & gt; Setzen Sie auch DeflateStream auf wahr.

Eine interessante Frage mit einigen guten Punkten von HH und TL.

    
___ answer18540341 ​​___

Das liegt daran, dass true die Daten nicht bis zum Schließen des zugrunde liegenden Streams löscht. Nach dem Schließen enthält leaveOpen die komprimierten Daten. Beachten Sie, dass compressionStream standardmäßig den zugrunde liegenden Stream schließt, wenn Sie ihn schließen, aber das möchten Sie nicht, daher müssen Sie %code% für den Parameter %code% übergeben. Außerdem benötigen Sie nicht 2 Speicher-Streams, sondern können direkt in %code% :

serialisiert werden %Vor%     
___ tag123binaryserialization ___ Der Prozess der Übersetzung von Datenstrukturen oder Objektstatus in ein Binärformat ___ tag123deflate ___ deflate ist ein verlustfreies Datenkomprimierungsformat und bezieht sich auch auf Implementierungen, die auf das Deflate-Format komprimiert werden. Das Deflate-Format wurde von Phil Katz von PKWare für das Archivformat PKZip (.zip) erstellt. Public Domain-Software bietet Deflate- und Inflate-Funktionen im gzip-Dienstprogramm und in der zlib-Bibliothek. ___
Thomas Levesque 30.08.2013 19:39
quelle
3

Von der ursprünglichen Antwort (Ich habe nicht genügend Credits, um ablehnen zu können)

  

Setzen Sie Ihr Steuerelement WriteLine außerhalb der Verwendung

Dies ist unvollständig und irreführend . DeflateStream schließt den zugrunde liegenden resultStream sobald DeflateStream den Gültigkeitsbereich verlässt. Daher wirft resultStream.Length

%Vor%

Thomas Levesque ist korrekt = & gt; Setzen Sie auch leaveOpen auf wahr.

Eine interessante Frage mit einigen guten Punkten von HH und TL.

    
Tom Wilson 10.02.2015 11:55
quelle