ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# 压缩和解压字符串

2022-01-12 10:31:33  阅读:159  来源: 互联网

标签:解压 1024 sizeStr string C# 字符串 new MemoryStream size


        嗯,就是将比较大的字符串进行压缩,使其占用空间小一点,我一般用在有时候接口间需要传输大量数据的时候(json数据较大或者含有base64),缩小体积以加快传输小效率。

实现功能:

压缩和解压字符串

开发环境:

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码:

 

 string fileData = "", compress = "";
  private void btnPath_Click(object sender, EventArgs e)
  {
      OpenFileDialog ofd = new OpenFileDialog();
      if (ofd.ShowDialog() == DialogResult.OK)
      {
          textBox1.Text = ofd.FileName;
          FileInfo fi = new FileInfo(ofd.FileName);
          GetSize(fi.Length, lbFile);
          fileData = File.ReadAllText(ofd.FileName);
      }
  }

  private void btnCompress_Click(object sender, EventArgs e)
  {
      compress = Compress(fileData);
      GetSize(Encoding.Default.GetBytes(compress).Length, lbCompress);
      MessageBox.Show("成功");
  }

  private void btnDecompress_Click(object sender, EventArgs e)
  {
      richTextBox1.Text = Decompress(compress);
      MessageBox.Show("成功");


  }

  //压缩字符串
  public string Compress(string value)
  {
      try
      {
          string data = "";
          byte[] byteArray = Encoding.Default.GetBytes(value);
          using (MemoryStream ms = new MemoryStream())
          {
              using (GZipStream sw = new GZipStream(ms, CompressionMode.Compress))
              {
                  sw.Write(byteArray, 0, byteArray.Length);
                  GetSize(ms.Length, lbCompress);
              }

              data = Convert.ToBase64String(ms.ToArray());
          }
          return data;

      }
      catch (Exception ex)
      {
          throw ex;
      }
  }

  //解压缩字符串
  public string Decompress(string value)
  {
      try
      {
          string data = "";
          byte[] bytes = Convert.FromBase64String(value);
          using (MemoryStream msReader = new MemoryStream())
          {
              using (MemoryStream ms = new MemoryStream(bytes))
              {
                  using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress))
                  {
                      byte[] buffer = new byte[1024];
                      int readLen = 0;
                      while ((readLen = zip.Read(buffer, 0, buffer.Length)) > 0)
                      {
                          msReader.Write(buffer, 0, readLen);
                      }

                  }
              }
              data = Encoding.Default.GetString(msReader.ToArray());
          }
          return data;
      }
      catch (Exception ex)
      {
          throw ex;
      }
  }

  //获取大小
  private void GetSize(long size, Control control)
  {
      string sizeStr = "";
      if (size < 1024)
          sizeStr = size.ToString("F2") + " Byte";
      else if (size >= 1024 && size < 1048576)
          sizeStr = (size / 1024).ToString("F2") + " K";
      else if (size >= 1048576 && size < 1073741824)
          sizeStr = (size / 1024 / 1024).ToString("F2") + " M";
      else if (size >= 1073741824)
          sizeStr = (size / 1024 / 1024 / 1024).ToString("F2") + " G";
      control.Text = sizeStr;
  }

实现效果:

由简入繁,拿来即用

更多精彩,请关注微信公众号:

 

 

标签:解压,1024,sizeStr,string,C#,字符串,new,MemoryStream,size
来源: https://blog.csdn.net/qq_27410185/article/details/122447826

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有