-4

ここでこのコードを動作させることができないのはなぜですか? 以前に圧縮されたバイト配列でこれを呼び出したい...とにかく、空の文字列を返すだけです...

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

1 に答える 1

5

圧縮ルーチンに問題があります。コンプレッサーが閉じられる(または廃棄される)までストリームから読み取ってはならず、コンプレッサーがすべてのバイトをスチームに書き込み終えることができます。

この質問に対する私の答えを確認してください。ソースデータを圧縮および解凍すると、ソースデータとは異なる結果が得られます。

于 2010-10-23T00:03:30.733 に答える