zip and unzip string with Deflate
29,746
There are two separate problems. First of all, in ZipStr
you need to flush or close the StreamWriter
and close the DeflateStream
before reading from the MemoryStream
.
Secondly, in UnZipStr
, you're constructing your result string from the compressed bytes in inputStream
. You should be returning the result of reader.ReadToEnd()
instead.
It would also be a good idea to specify the string encoding in the StreamWriter
and StreamReader
constructors.
Try the following code instead:
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();
}
}
}
}
Author by
Mikhail
Updated on August 26, 2020Comments
-
Mikhail almost 4 years
I need to zip and unzip string
Here is code:
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(); } }
and
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()); } }
It seems that there is error in UnZipStr method. Can somebody help me?
-
Phil Ross over 14 years@Mikhail There was a problem with
ZipStr
too. I've updated my answer. -
hackp0int about 10 years@PhilRoss Thanks a lot, But I have a question. How to do this multithreaded? Using TPL?