Compress and decompress string in c#

后端 未结 2 767
清歌不尽
清歌不尽 2021-01-07 01:26

I know there is system.io.compression.gzipstream but it accept a stream as arguments.

I\'m looking for a method that accept string

eg.

2条回答
  •  隐瞒了意图╮
    2021-01-07 01:40

    Please try below, based on this url : http://dreamstatecoding.blogspot.com/2013/04/c-array-compress-and-decompress-with.html. We avoid to use double MemoryStream.

        public static byte[] Compress(string text)
        {
            var bytes = Encoding.Unicode.GetBytes(text);
            using (var mso = new MemoryStream())
            {
                using (var gs = new GZipStream(mso, CompressionMode.Compress))
                {
                    gs.Write(bytes, 0, bytes.Length);
                }
                return mso.ToArray();
            }
        }
    
        public static string Decompress(byte[] data)
        {
            // Read the last 4 bytes to get the length
            byte[] lengthBuffer = new byte[4];
            Array.Copy(data, data.Length - 4, lengthBuffer, 0, 4);
            int uncompressedSize = BitConverter.ToInt32(lengthBuffer, 0);
    
            var buffer = new byte[uncompressedSize];
            using (var ms = new MemoryStream(data))
            {
                using (var gzip = new GZipStream(ms, CompressionMode.Decompress))
                {
                    gzip.Read(buffer, 0, uncompressedSize);
                }
            }
            return Encoding.Unicode.GetString(buffer);            
        }
    

提交回复
热议问题