使用gzip压缩字符串

虽然对简单的字符串效率不高,但是对长的字符串还是可以的。

    static string CompressString(string input)

        {

            string retValue = string.Empty;

            if (!string.IsNullOrEmpty(input))

            {

                byte[] byteSource = Encoding.UTF8.GetBytes(input);

                MemoryStream msm = new MemoryStream();

                using (GZipStream gzs = new GZipStream(msm, CompressionMode.Compress, true))

                {

                    gzs.Write(byteSource, 0, byteSource.Length);

                }



                msm.Position = 0;



                byte[] compBytes = new byte[msm.Length];

                msm.Read(compBytes, 0, compBytes.Length);



                msm.Close();



                byte[] finalBuffer = new byte[compBytes.Length + 4];

                Buffer.BlockCopy(compBytes, 0, finalBuffer, 4, compBytes.Length);

                Buffer.BlockCopy(BitConverter.GetBytes(byteSource.Length), 0, finalBuffer, 0, 4);



                retValue = System.Convert.ToBase64String(finalBuffer);

            }



            return retValue;

        }



        static string DecompressString(string input)

        {

            string retValue = string.Empty;

            if (!string.IsNullOrEmpty(input))

            {

                byte[] source = System.Convert.FromBase64String(input);

                using (MemoryStream msm = new MemoryStream())

                {

                    int length = BitConverter.ToInt32(source, 0);

                    msm.Write(source, 4, source.Length - 4);



                    //Console.WriteLine(Encoding.UTF8.GetString(source));



                    msm.Position = 0;

                    byte[] decmpBytes = new byte[length];

                    using (GZipStream gzs = new GZipStream(msm, CompressionMode.Decompress))

                    {

                        gzs.Read(decmpBytes, 0, length);



                        //gzs.CopyTo();

                    }



                    retValue = Encoding.UTF8.GetString(decmpBytes);

                }

            }



            return retValue;

        }

你可能感兴趣的:(GZip)