2016-07-12 46 views
1

我正在測試一些代碼。我堅持以下。我曾寫過text,壓縮流的長度總是10?我究竟做錯了什麼?爲什麼壓縮流的長度始終爲10?

var inStream = new MemoryStream(); 

var inWriter = new StreamWriter(inStream); 

str text = "HelloWorldsasdfghj123455667880fgsjfhdfasdferrbvbyjun hbwecwcxqsz edcrgvebrjnuj5juerqwetsrgfggshurhtnbvzkfjhguhgrgal;kjhao;rhl;zkfhg;aorihghg;oahrgarhguhh';aaeaeiaijeihjrhfidfhfidfidhh953453453"; 
inWriter.WriteLine(text); 

inWriter.Flush(); 
inStream.Position = 0; 

var outStream = new MemoryStream(); 
var compressStream = new GZipStream(outStream, CompressionMode.Compress); 
inStream.CopyTo(compressStream); 

compressStream.Flush(); 
outStream.Flush(); 
compressStream.Flush(); 

outStream.Position = 0; 

Console.WriteLine(outStream.Position); 
Console.WriteLine(outStream.Length); 
+0

http://stackoverflow.com/questions/34566559/is-it-possible-to-get-length-of-closed-memory-stream – MethodMan

+0

@MethodMan目前我沒有關閉任何東西。它不應該是 –

+0

但是@MethodMan是正確的 - 直到你關閉它,壓縮流不知道你已經寫完了 - 所以無法完成它的壓縮算法。 – PhillipH

回答

2

直到你關閉它,壓縮流並不知道你已經寫完了 - 所以無法完成它的壓縮算法。 Flushing刷新可以刷新的那些部分,但是直到它被告知已經完成添加新的字節時,它不能刷新其最後的壓縮數據包。

+0

注意:如果你想使用後面的結果流,你需要像這樣使用它:GZipStream(outStream,CompressionMode.Compress,true) –