Compression/Decompression string with C#

后端 未结 6 1913
情歌与酒
情歌与酒 2020-11-22 17:14

I am newbie in .net. I am doing compression and decompression string in C#. There is a XML and I am converting in string and after that I am doing compression and decompress

6条回答
  •  春和景丽
    2020-11-22 17:34

    I like @fubo's answer the best but I think this is much more elegant.

    This method is more compatible because it doesn't manually store the length up front.

    Also I've exposed extensions to support compression for string to string, byte[] to byte[], and Stream to Stream.

    public static class ZipExtensions
    {
        public static string CompressToBase64(this string data)
        {
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(data).Compress());
        }
    
        public static string DecompressFromBase64(this string data)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(data).Decompress());
        }
        
        public static byte[] Compress(this byte[] data)
        {
            using (var sourceStream = new MemoryStream(data))
            using (var destinationStream = new MemoryStream())
            {
                sourceStream.CompressTo(destinationStream);
                return destinationStream.ToArray();
            }
        }
    
        public static byte[] Decompress(this byte[] data)
        {
            using (var sourceStream = new MemoryStream(data))
            using (var destinationStream = new MemoryStream())
            {
                sourceStream.DecompressTo(destinationStream);
                return destinationStream.ToArray();
            }
        }
        
        public static void CompressTo(this Stream stream, Stream outputStream)
        {
            using (var gZipStream = new GZipStream(outputStream, CompressionMode.Compress))
            {
                stream.CopyTo(gZipStream);
                gZipStream.Flush();
            }
        }
    
        public static void DecompressTo(this Stream stream, Stream outputStream)
        {
            using (var gZipStream = new GZipStream(stream, CompressionMode.Decompress))
            {
                gZipStream.CopyTo(outputStream);
            }
        }
    }
    

提交回复
热议问题