GZipStream - Compress/Decompress a string
Introduction
This article presents two methods to compress and decompress strings using System.IO.Compression.GZipStream
.
Context/Problem
After converting code from VB.NET 1.1 to C#.NET 3.5, I needed to change some code using a third party zip class to GZipStream. Code samples found on the web or on VS help where presenting solutions dealing with FileStream but in this case, a string is given as an input parameter.
So the little challenge was to go from a string to a byte array (byte[]) and vice versa without losing a char nor changing its encoding because I ended up finding that System.Text.Encoding.Unicode.GetBytes()
/GetString()
previously used in the VB code was not acting properly, resulting in a loss of characters. Plus the Flush()
method on GZipStream with the compression option doesn't flush everything...
Tips
So as I found no method transforming a string into a byte[] and vice versa without involving encoding specifications, I ended up with a loop and a cast. If you have a better idea, please tell me so.
And I found out, if you only flush a GZipStream instance and retrieve the data from the underlying stream without closing this GZipStream instance, you miss part of the data.
The Code
Compress/Zip a string:
Comments