【问题标题】:C# MemoryStream Write method writing all 0's to byte arrayC# MemoryStream Write 方法将所有 0 写入字节数组
【发布时间】:2026-02-17 21:15:01
【问题描述】:

我正在尝试使用 GZipStream 类解压缩文件。我使用 GZipStream 的 CopyTo 方法将解压缩的数据写入 MemoryStream 对象。复制到 MemoryStream 对象后,我可以通过查看非公共属性中的 _buffer 来查看数据。

当我尝试写入字节数组时,问题就开始了。调用 Write() 方法会产生一个全为 0 的字节数组,并且 _buffer 属性会变为全 0。我认为这可能是位置或刷新()/关闭()问题,但这并不能解决问题。有人可以告诉我哪里出错了吗?

var input = new MemoryStream(data);
var output = new MemoryStream();

using (var x = new System.IO.Compression.GZipStream(input, System.IO.Compression.CompressionMode.Decompress))
{
    x.CopyTo(output);
}

output.Position = 0;
var bytes = new byte[output.Length];

output.Write(bytes, 0, bytes.Length); //All 0's 
output.Flush();
output.Close(); //still all 0's 

【问题讨论】:

  • var bytes = output.ToArray(); 带给你什么?
  • 你不认为data可能与这个问题有关吗?
  • 您意识到output.Write 实际上将数据写入您的内存流吗?你在这里从头到尾做。
  • 试试... var bytes = output.ToArray();
  • 抱歉,您不想阅读而不是写作吗?

标签: c#


【解决方案1】:

您需要调用Read 而不是Write 来获取数据。

output.Read(bytes, 0, bytes.Length);

你也可以这样做

var bytes = output.ToArray();

【讨论】: