Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过BinaryReader将字节数组解压缩为字符串,生成空字符串_C#_Memorystream_Gzipstream_Binaryreader - Fatal编程技术网

C# 通过BinaryReader将字节数组解压缩为字符串,生成空字符串

C# 通过BinaryReader将字节数组解压缩为字符串,生成空字符串,c#,memorystream,gzipstream,binaryreader,C#,Memorystream,Gzipstream,Binaryreader,我正在尝试解压字节数组,并使用二进制读取器将其转换为字符串。执行以下代码时,流内位置从0更改为数组的长度,但str始终为空字符串 BinaryReader br = null; string str = String.Empty; using (MemoryStream inStream = new MemoryStream(pByteArray)) { GZipStream zipStream = new GZipStream(inStream, CompressionMode.De

我正在尝试解压字节数组,并使用二进制读取器将其转换为字符串。执行以下代码时,流内位置从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();
}

您没有说明数据是如何压缩的,但下面是一个压缩和解压缩缓冲区的完整示例:

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();
        }
    }
}

你能添加一个简短但完整的程序来演示这个问题吗?你不正确地使用了GZipStream。我以为GZipStream可以把这个流作为输入参数,我想让它解压缩。这个错误是什么意思?“GZip头中的幻数不正确。请确保您正在传递GZip流。”