通过BinaryReader解压缩字节数组得到空字符串

11

我正在尝试使用二进制读取器将字节数组解压缩并转换为字符串。执行以下代码时,inStream的位置从0更改为数组的长度,但str始终为空字符串。

BinaryReader br = null;
string str = String.Empty;

using (MemoryStream inStream = new MemoryStream(pByteArray))
{
    GZipStream zipStream = new GZipStream(inStream, CompressionMode.Decompress);
    BinaryReader br = new BinaryReader(zipStream);
    str = br.ReadString();
    inStream.Close();
    br.Close();
}

1
你能添加一个简短但完整的程序来演示问题吗? - dtb
您正在错误地使用GZipStreams。 - leppie
我认为GZipStream可以将流作为输入参数,并且我希望它对其进行解压缩。 - jkh
1个回答

31

你还没有展示数据是如何被压缩的,但是这里有一个完整的例子来压缩和解压缩一个缓存区:

using System;
using System.IO;
using System.IO.Compression;
using System.Text;

class Program
{
    static void Main()
    {
        var test = "foo bar baz";

        var compressed = Compress(Encoding.UTF8.GetBytes(test));
        var decompressed = Decompress(compressed);
        Console.WriteLine(Encoding.UTF8.GetString(decompressed));
    }

    static byte[] Compress(byte[] data)
    {
        using (var compressedStream = new MemoryStream())
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
        {
            zipStream.Write(data, 0, data.Length);
            zipStream.Close();
            return compressedStream.ToArray();
        }
    }

    static byte[] Decompress(byte[] data)
    {
        using (var compressedStream = new MemoryStream(data))
        using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
        using (var resultStream = new MemoryStream())
        {
            zipStream.CopyTo(resultStream);
            return resultStream.ToArray();
        }
    }
}

6
这个错误是什么意思?“GZip头部的魔数不正确。请确保您正在传递一个GZip流。” - Scar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接