Ho riscontrato un problema con questa funzione di test in cui prendo una stringa in memoria, la comprime e la decomprimo. La compressione funziona alla grande, ma non riesco a far funzionare la decompressione.Come utilizzare GZipStream con System.IO.MemoryStream?
//Compress
System.IO.MemoryStream outStream = new System.IO.MemoryStream();
GZipStream tinyStream = new GZipStream(outStream, CompressionMode.Compress);
mStream.Position = 0;
mStream.CopyTo(tinyStream);
//Decompress
outStream.Position = 0;
GZipStream bigStream = new GZipStream(outStream, CompressionMode.Decompress);
System.IO.MemoryStream bigStreamOut = new System.IO.MemoryStream();
bigStream.CopyTo(bigStreamOut);
//Results:
//bigStreamOut.Length == 0
//outStream.Position == the end of the stream.
Credo che bigStream fuori dovrebbe almeno avere i dati in essa contenuti, soprattutto se il mio flusso di fonti (outStream) è in corso la lettura. questo è un bug MSFT o il mio?
+1 buona risposta Timwi. Solo per aggiungere a questo, GZip ha un buffer interno dei dati che deve fare per comprimere. Non può sapere che ha finito di ricevere dati finché non lo si chiude e quindi non sputa gli ultimi byte e la decompressione del flusso parziale fallisce. – MerickOWA
Penso che siamo su .NET 3.5 (lavorando con Unity), quindi. Copio non esiste ancora. Guardando altrove su SO per come copiare da uno stream all'altro: http://stackoverflow.com/questions/230128/best-way-to-copy-between-two-stream-stances – Almo
Grazie per questo, sono stato avere problemi a capire esattamente come organizzare i flussi per ottenere l'output corretto in entrambe le direzioni – MikeT