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%Ich habe das folgende Stück Code:
%Vor% Die Sache ist, dass DeflateStream
immer leer ist!
Was mache ich hier falsch?
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%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.
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% :
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.
Tags und Links c# serialization memorystream deflate binary-serialization