2016-07-12 38 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) –