添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

因为一直在处理restful API,给移动端提供的数据需要考虑流量问题,优先考虑就是压缩现有的字符串,然后再考虑业务逻辑方面的减少流量。鉴于找这些资料也花了不少时间,所以整理了这篇文章,留作纪念。

PHP与C#的压缩与解压

http://www.oschina.net/question/2265205_181108

http://my.oschina.net/linland/blog/217769?fromerr=Kf9b6ElQ

http://www.yiibai.com/sql/function.gzencode.html

https://forums.xamarin.com/discussion/33607/using-system-io-compression-in-pcl

=====================

python的压缩与解压

http://outofmemory.cn/code-snippet/2030/Python-usage-gzip-pack-shujubao http://www.cnblogs.com/mmix2009/p/3221371.html http://blog.csdn.net/lxdcyh/article/details/4021476 =====================

javascript的压缩与解压

http://stackoverflow.com/questions/14620769/decompress-gzip-and-zlib-string-in-javascript

http://nodeca.github.io/pako/

代码具体实现

PHP (>=5.4)

  1. using System.IO.Compression;
  2. using System.Text;
  3. public string Compress ( string text)
  4. {
  5. byte [] buffer = Encoding.UTF8.GetBytes (text);
  6. using (MemoryStream ms = new MemoryStream ()) {
  7. GZipStream Compress = new GZipStream (ms, CompressionMode.Compress);
  8. Compress.Write (buffer, 0, buffer.Length);
  9. Compress.Close ();
  10. return Convert.ToBase64String (ms.ToArray ());
  11. }
  12. }
  13. public string Decompress ( string text)
  14. {
  15. byte [] buffer = Convert.FromBase64String (text);
  16. using (MemoryStream tempMs = new MemoryStream ()) {
  17. using (MemoryStream ms = new MemoryStream (buffer)) {
  18. GZipStream Decompress = new GZipStream (ms, CompressionMode.Decompress);
  19. Decompress.CopyTo (tempMs);
  20. Decompress.Close ();
  21. return Encoding.UTF8.GetString (tempMs.ToArray ());
  22. }
  23. }
  24. }

python

  1. #coding=utf-8
  2. import base64
  3. import StringIO,gzip
  4. def zipData( content):
  5. zbuf = StringIO.StringIO()
  6. zfile = gzip.GzipFile(mode= 'wb' , compresslevel= 9 , fileobj=zbuf)
  7. zfile.write(content)
  8. zfile.close()
  9. return base64.b64encode(zbuf.getvalue())
  10. def unzipData(content):
  11. compresseddata=base64.b64decode(content)
  12. compressedstream = StringIO.StringIO(compresseddata)
  13. gzipper = gzip.GzipFile(fileobj=compressedstream)
  14. data = gzipper.read()
  15. return data
  16. s=zipData( "1" )
  17. print s
  18. s1=unzipData(s)
  19. print s1

javascript

  1. < html >
  2. < head >
  3. < meta charset = "UTF-8" >
  4. < script src = "http://code.jquery.com/jquery-2.1.4.min.js" > </ script >
  5. < script src = "https://raw.githubusercontent.com/nodeca/pako/master/dist/pako.js" > </ script >
  6. < script type = "text/javascript" >
  7. function gzip(string) {
  8. var charData = string .split('').map(function(x){return x.charCodeAt(0);});
  9. var binData = new Uint8Array(charData);
  10. var data = pako .gzip(binData);
  11. var strData = String .fromCharCode.apply(null, new Uint16Array(data));
  12. return btoa(strData);
  13. }
  14. function ungzip(string)
  15. {
  16. var strData = atob (string);
  17. var charData = strData .split('').map(function(x){return x.charCodeAt(0);});
  18. var binData = new Uint8Array(charData);
  19. var data = pako .ungzip(binData);
  20. var strData = String .fromCharCode.apply(null, new Uint16Array(data));
  21. return strData;
  22. }
  23. test = "1" ;
  24. var s = gzip (test);
  25. alert(s);
  26. alert(ungzip(s));
  27. </ script >
  28. </ head >
  29. </ html >
背景介绍因为一直在处理restful API,给移动端提供的数据需要考虑流量问题,优先考虑就是压缩现有的字符串,然后再考虑业务逻辑方面的减少流量。鉴于找这些资料也花了不少时间,所以整理了这篇文章,留作纪念。参考网址PHP与C#的压缩与解压http://www.oschina.net/question/2265205_181108http://my.o 一个功能A,用的是L1 语言 进行编程实现的;请把该功能,在L2 语言 的环境下进行调用/合并,并能正确的返回结果。 请先自己编写或找到实现A功能的代码,或仅有可执行文件,并进行跨 语言 开发。 多 语言 开发一般基于第三方的库或解决方案。 A:数据 压缩 解压 缩功能, L1: C++ , L2: Python 和 Java 使用 语言 Python 、Java Python 3.8 IDEA 2020.1.4 Visual Studio 2019 /// 将传入 字符串 GZip 算法 压缩 后,返回Base64编码字符 /// </summary> /// <param name="rawString">需要 压缩 字符串 </param> /// <returns> 压缩 后的Base64编码的 字符串 </returns> public static string GZ... 1. 讲故事 在我们的一个全内存项目中,需要将一家大品牌店铺小千万的trade灌入到内存中,大家知道trade中一般会有订单来源,省市区 ,当把这些字段灌进去后,你会发现他们特别侵蚀内存,因为都是 字符串 类型,不知道大家对内存侵蚀性是不是很清楚,我就问一个问题。 Question: 一个空 字符串 占用多大内存? 你知道吗? 思考之后,下面我们就一起验证下,使用windbg去托管堆一查究竟,代码如下: static void Main(string[] args) string s = string.Empty; Console.ReadLine(); 承接微信小程序开发。扫码加微信。 GZIP 压缩 GZIP 解压 需要用到 pako.js 文件:下载地址:https://download.csdn.net/download/qq_35713752/10627338 使用方法: JS 压缩 解压 : var pako = require('../../utils/pako.min.js... byte[] byteArray = new byte[value.Length]; int indexBA = 0; foreach (char item in value.ToCharArray()) byteArray[indexBA++] = (byte)item; //Prepare f 随着微软对 C# 不断发展和更新, C# 中对于数组操作的方式也变得越来越多样化。以往要实现过滤数组中的空 字符串 ,都是需要实行循环的方式来排除和过滤。但 C# 3.0新增的lambda表达式就可以很方便实现这个功能,下面一起看看为大家 整理 几种 清除数组中的空 字符串 的方法,有需要的可以参考学习。 方式一:使用lambda表达式筛选过滤掉数组中空 字符串 /// 使用lambda表达式排除/过滤/清空/删除掉 字符串 数组中的空 字符串 static void Mai
C# 中,可以使用`System.IO.Compression`命名空间中的` GZip Stream`类将 字符串 进行 Gzip 压缩 ,然后将 压缩 后的数据存入MySQL数据库中。以下是一个简单的示例代码: ```csharp using System; using System.IO; using System.IO.Compression; using MySql.Data.MySqlClient; class Program static void Main(string[] args) string inputString = new string('a', 2_000_000); // 生成一个长度为2M的 字符串 // 压缩 字符串 byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(inputString); byte[] compressedBytes; using (var outputStream = new MemoryStream()) using (var gzip Stream = new GZip Stream(outputStream, CompressionMode.Compress)) gzip Stream.Write(inputBytes, 0, inputBytes.Length); compressedBytes = outputStream.ToArray(); Console.WriteLine($" 压缩 后大小:{compressedBytes.Length}"); // 输出 压缩 后的大小 // 存入MySQL数据库 string connectionString = "server=localhost;user=root;password=123456;database=test;"; using (var connection = new MySqlConnection(connectionString)) connection.Open(); var command = connection.CreateCommand(); command.CommandText = "INSERT INTO `data` (`id`, `data`) VALUES (@id, @data)"; command.Parameters.AddWithValue("@id", 1); command.Parameters.AddWithValue("@data", compressedBytes); command.ExecuteNonQuery(); 在上面的代码中,我们首先生成一个长度为2M的 字符串 ,然后使用` GZip Stream`类进行 压缩 。在 压缩 时,我们创建一个输出流`outputStream`,然后将其传递给` GZip Stream`类的构造函数。在调用`Write`方法时,` GZip Stream`类将 压缩 数据写入输出流中。最后,我们将输出流转换为字节数组,并将其存储在`compressedBytes`变量中。 接下来,我们使用`MySqlConnection`类连接MySQL数据库,并将 压缩 后的数据存入`data`表中的`data`字段中。在存储时,我们使用参数化查询并将`compressedBytes`变量传递给参数`@data`。 值得注意的是,MySQL中的`BLOB`类型支持存储二进制数据,因此我们可以将 压缩 后的字节数组直接存入数据库中。在读取数据时,我们可以将其转换为字节数组,然后使用` GZip Stream`类进行 解压 缩。