декомпрессия c # gzipstream больше похожа на депрессию - PullRequest
0 голосов
/ 23 октября 2010

почему я не могу заставить этот код работать здесь?Я хочу вызвать это для байтового массива, который был ранее сжат .... в любом случае, он просто возвращает пустую строку ...

    public static string FromGZipToString( this byte[] source )
    {
        using( MemoryStream stream = new MemoryStream( ) )
        {
            stream.Write( source, 0, source.Length );

            using (var gzipstream = new GZipStream(stream, CompressionMode.Decompress))
            using (var reader = new StreamReader(gzipstream)) 
            {
               return reader.ReadToEnd( );
            }
        }
    }

кстати, это код сжатия ....

    public static byte[] ToGZip( this string source )
    {
        using( var stream = new MemoryStream( ) )
        using( var compressor = new GZipStream( stream, CompressionMode.Compress ) )
        {
            var bytes = System.Text.UTF8Encoding.UTF8.GetBytes( source );

            compressor.Write( bytes, 0, bytes.Length );

            return stream.ToArray( );
        }
    }

1 Ответ

5 голосов
/ 23 октября 2010

Ваша процедура сжатия неверна.Он не должен читать из потока, пока компрессор не будет закрыт (или утилизирован), что позволит компрессору завершить запись всех байтов в пар.

Проверьте мой ответ на этот вопрос: сжатие ираспаковка исходных данных дает результат, отличный от исходных данных

...