【问题标题】:Why the length of zipped stream is always 10?为什么压缩流的长度总是10?
【发布时间】:2016-07-12 11:12:40
【问题描述】:

我正在测试一些代码。我坚持以下。我写过什么text,压缩流的长度总是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);

【问题讨论】:

  • @MethodMan 目前我没有关闭任何东西。不应该是这样的
  • 但是@MethodMan 是对的——在你关闭它之前,压缩流并不知道你已经完成了写入——所以无法完成它的压缩算法。
  • @PhillipH 通过 using 和 leaveOpen,现在可以正常工作了。我正要发布一个自我答案。相反,您可以发布您的评论作为答案。

标签: c# gzipstream


【解决方案1】:

在您关闭它之前,压缩流不知道您已完成对其的写入 - 因此无法完成其压缩算法。刷新会刷新它可以刷新的那些部分,但在被告知您已完成添加新字节之前,它无法刷新其最后一个压缩数据包。

【讨论】:

  • 注意:如果以后想使用结果流,需要这样使用:GZipStream(outStream, CompressionMode.Compress, true)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2023-03-27
相关资源
最近更新 更多