Распаковка массива байтов в строку через BinaryReader дает пустую строку

Я пытаюсь распаковать массив байтов и преобразовать его в строку с помощью двоичного считывателя. При выполнении следующего кода позиция 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();
}

person jkh    schedule 10.08.2011    source источник
comment
Можете ли вы добавить короткую, но полную программу, демонстрирующую проблему?   -  person dtb    schedule 10.08.2011
comment
Вы неправильно используете GZipStreams.   -  person leppie    schedule 10.08.2011
comment
Я думал, что GZipStream может принимать поток в качестве входного параметра, и я хочу, чтобы он распаковывал его.   -  person jkh    schedule 10.08.2011


Ответы (1)


Вы не показали, как сжимаются данные, но вот полный пример сжатия и распаковки буфера:

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();
        }
    }
}
person Darin Dimitrov    schedule 10.08.2011
comment
Что означает эта ошибка? Магическое число в заголовке GZip неверно. Убедитесь, что вы передаете поток GZip. - person Scar; 27.06.2016