16

文字列を圧縮および解凍する必要があります

コードは次のとおりです。

public static byte[] ZipStr(String str)
{
    using (MemoryStream output = new MemoryStream())
    using (DeflateStream gzip = new DeflateStream(output, CompressionMode.Compress))
    using (StreamWriter writer = new StreamWriter(gzip))
       {
                writer.Write(str);
                return output.ToArray();
       }
}

public static string UnZipStr(byte[] input)
{
    using (MemoryStream inputStream = new MemoryStream(input))
    using (DeflateStream gzip = new DeflateStream(inputStream, CompressionMode.Decompress))
    using (StreamReader reader = new StreamReader(gzip))
       {
        reader.ReadToEnd();
        return System.Text.Encoding.UTF8.GetString(inputStream.ToArray());
       }
}

UnZipStrメソッドにエラーがあるようです。誰かが私を助けることができますか?

4

1 に答える 1

33

2つの別々の問題があります。まず、から読み取る前に、をフラッシュまたは閉じて閉じるZipStr必要があります。StreamWriterDeflateStreamMemoryStream

次に、ではUnZipStr、の圧縮バイトから結果文字列を作成していますinputStream。代わりにの結果を返す必要がありますreader.ReadToEnd()

StreamWriterまた、 StreamReaderコンストラクターで文字列エンコーディングを指定することもお勧めします。

代わりに次のコードを試してください。

public static byte[] ZipStr(String str)
{
    using (MemoryStream output = new MemoryStream())
    {
        using (DeflateStream gzip = 
          new DeflateStream(output, CompressionMode.Compress))
        {
            using (StreamWriter writer = 
              new StreamWriter(gzip, System.Text.Encoding.UTF8))
            {
                writer.Write(str);           
            }
        }

        return output.ToArray();
    }
}

public static string UnZipStr(byte[] input)
{
    using (MemoryStream inputStream = new MemoryStream(input))
    {
        using (DeflateStream gzip = 
          new DeflateStream(inputStream, CompressionMode.Decompress))
        {
            using (StreamReader reader = 
              new StreamReader(gzip, System.Text.Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
    }
}
于 2010-01-22T17:01:38.040 に答える