zip и распаковать строку с Deflate
Мне нужно сжать и распаковать строку
Вот код:
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 есть ошибка. Кто-нибудь может мне помочь?
1 ответ
Решение
Есть две отдельные проблемы. Прежде всего, в ZipStr
вам нужно промыть или закрыть StreamWriter
и закройте DeflateStream
перед чтением из MemoryStream
,
Во-вторых, в 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();
}
}
}
}