Bu sınama işleviyle ilgili bir sorun yaşıyorum, bir bellek dizesi alıyorum, sıkıştırın ve sıkıştırın. Sıkıştırma harika çalışıyor, ancak dekompresyonun işe yaramayacağını göremiyorum.GZipStream'i System.IO.MemoryStream ile nasıl kullanırım?
//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.
Ben bigStream dışarı en azından benim kaynak akışı (outStream) okunurken, özellikle içinde verilere sahip olması gerektiğine inanıyoruz. bu bir MSFT hatası mı yoksa benim mi?
+1 iyi cevap Timwi. Buna ek olarak, GZip'in sıkıştırmak için yapması gereken bazı veri tamponları vardır. Onu kapatıncaya kadar veri almanın bittiğini bilemez ve bu yüzden son birkaç baytı tükürmez ve kısmi akımın dekompresyonu başarısız olur. – MerickOWA
Sanırım .NET 3.5 (Unity ile çalışıyoruz), yani .CopyTo henüz mevcut değil. Başka bir yerden bir akıştan diğerine nasıl kopyalanacağını öğrenmek için: http://stackoverflow.com/questions/230128/best-way-to-copy-between-two-stream-instances – Almo
Bunun için teşekkürler. her iki yönde de doğru çıkışı elde etmek için akışları nasıl düzenleyeceğimizi bulmakta sorun yaşıyorum – MikeT