Próbuję serializować i kompresować WPF FlowDocument
, a następnie zrobić odwrotność - rozpakować tablicę bajtów i deserializować w celu odtworzenia FlowDocument - przy użyciu klasy .NET GZipStream
. Obserwuję przykład opisany na MSDN i mam następujący program testowy:.NET GZipStream dekompresuje produkcję pustego strumienia
var flowDocumentIn = new FlowDocument();
flowDocumentIn.Blocks.Add(new Paragraph(new Run("Hello")));
Debug.WriteLine("Compress");
byte[] compressedData;
using (var uncompressed = new MemoryStream())
{
XamlWriter.Save(flowDocumentIn, uncompressed);
uncompressed.Position = 0;
using (var compressed = new MemoryStream())
using (var compressor = new GZipStream(compressed, CompressionMode.Compress))
{
Debug.WriteLine(" uncompressed.Length: " + uncompressed.Length);
uncompressed.CopyTo(compressor);
Debug.WriteLine(" compressed.Length: " + compressed.Length);
compressedData = compressed.ToArray();
}
}
Debug.WriteLine("Decompress");
FlowDocument flowDocumentOut;
using (var compressed = new MemoryStream(compressedData))
using (var uncompressed = new MemoryStream())
using (var decompressor = new GZipStream(compressed, CompressionMode.Decompress))
{
Debug.WriteLine(" compressed.Length: " + compressed.Length);
decompressor.CopyTo(uncompressed);
Debug.WriteLine(" uncompressed.Length: " + uncompressed.Length);
flowDocumentOut = (FlowDocument) XamlReader.Load(uncompressed);
}
Assert.AreEqual(flowDocumentIn, flowDocumentOut);
jednak uzyskać wyjątek w XamlReader.Load
linii co jest normalne, ponieważ wyjście debugowania mówi, że nieskompresowany strumień ma długość zerową.
Compress
uncompressed.Length: 123
compressed.Length: 202
Decompress
compressed.Length: 202
uncompressed.Length: 0
Dlaczego nie ostateczna uncompressed
strumień zawiera oryginalne 123 bajtów?
(proszę ignorować faktu, że „skompresowany” Tablica bajtów jest większa niż „nieskompresowanego” tablicy bajtów - będę normalnie pracować ze znacznie większymi dokumentami Flow)
Choć może rozwiązać ten problem, należy rozważyć, czy chcesz korzystać z tej klasy w pierwsze miejsce. Zobacz moje komentarze tutaj: http://stackoverflow.com/questions/11435200/why-does-my-c-sharp-gzip-produce-a-larger-file-than-fiddler-or-php –