首页 > 编程语言 >关于几种语言(c#,php,python,javascript)字符串的gzip压缩与解压的整理

关于几种语言(c#,php,python,javascript)字符串的gzip压缩与解压的整理

时间:2024-06-18 15:55:27浏览次数:13  
标签:解压 base64 http MemoryStream c# javascript python gzip using

背景介绍
因为一直在处理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)

[php] view plain copy
$srcString="1";
$srcCompress=base64_encode(gzencode($srcString,9));
echo strlen($srcCompress).'---压缩后字符串长度
';
$newString=base64_decode($srcCompress);
$newString=gzdecode($newString);
echo $newString.'----解压后原字符串
';

c#
(建议还是考虑各个平台的,PCL版本下的见前面的网址,但是没调试通过)

[csharp] view plain copy
using System.IO.Compression;
using System.Text;
public string Compress (string text)
{
byte[] buffer = Encoding.UTF8.GetBytes (text);
using (MemoryStream ms = new MemoryStream ()) {
GZipStream Compress = new GZipStream (ms, CompressionMode.Compress);

Compress.Write (buffer, 0, buffer.Length);

Compress.Close ();

return Convert.ToBase64String (ms.ToArray ());

}
}

public string Decompress (string text)
{
byte[] buffer = Convert.FromBase64String (text);
using (MemoryStream tempMs = new MemoryStream ()) {
using (MemoryStream ms = new MemoryStream (buffer)) {
GZipStream Decompress = new GZipStream (ms, CompressionMode.Decompress);

Decompress.CopyTo (tempMs);

Decompress.Close ();

return Encoding.UTF8.GetString (tempMs.ToArray ());
}
}
}

python
[python] view plain copy

coding=utf-8

import base64
import StringIO,gzip
def zipData( content):
zbuf = StringIO.StringIO()
zfile = gzip.GzipFile(mode='wb', compresslevel=9, fileobj=zbuf)
zfile.write(content)
zfile.close()
return base64.b64encode(zbuf.getvalue())
def unzipData(content):
compresseddata=base64.b64decode(content)
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
data = gzipper.read()
return data
s=zipData("1")
print s
s1=unzipData(s)
print s1

javascript
[html] view plain copy

标签:解压,base64,http,MemoryStream,c#,javascript,python,gzip,using
From: https://www.cnblogs.com/qdxt/p/18254496

相关文章

  • Ceph提供nfs服务
    目录Ceph提供nfs服务1.前期准备1.1检查模块1.2检查是否有nfs-ganesha集群2.创建nfs服务2.1ceph提供的nfs的架构3.nfs导出3.1创建cephfs3.2导出3.3客户端尝试挂载3.4验证4.高可用nfs-ganeshaCeph提供nfs服务ceph除了可以提供cephfs之外,也是可以支持nfs的,因为如果直接......
  • 02-Excel初阶操作-学习笔记
    数据透视表专题续利用筛选字段切换数据场景:在数据透视表中显示各个所属地区每个月筛选出宠物用品类别,销售部门为三科的发生额,并在会议时展示,样例如下所示。具体操作step1:制作数据透视表点击任意单元格——插入选项卡——数据透视表——将“订购日期”拖拽到行字段,“所......
  • 基于google f1的schema-change
    异步schema变更为什么在分布式系统中异步变更schema比较困难F1中的schema变更是在线的、异步的,schema变更的过程中所有数据保持可用,保持数据一致性,并最大限度的减小对性能的影响。最大的难点在于所有F1服务器的schema变更是无法同步的,也就是说不同的F1服务器会在......
  • springboot 项目jacoco 覆盖率测试
    1.POM<dependency><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.2</version></dependency> <plugin>......
  • python函数声明(参数/返回值注释)和三个双引号用法
     1#python的"""三个双引号两种用法:(1)多行注释(2)定义多行字符串2deff1(ham:42,eggs:int='spam')->"Nothingtoseehere":3print("函数注释",f1.__annotations__)#函数注释{'ham':42,'eggs':<cl......
  • (slam工具)6 python四元数转化旋转矩阵
       importnumpyasnpfromscipy.spatial.transformimportRotationasRimportpyprojfrompyprojimportProj,transform#0.0169380355232107080.58455146147157355-0.488705791564092830.64744060819180593-129342.747563395343469822.8668770161534369......
  • 卫士通电科网安安全IpSec网关Ukey开发对接
    官方公开的开发文档,有几个坑,着重说一下踩坑的记录过程。1、通过官方的客户端接口模拟程序获取前端参数:随机数和token2、java程序调用官方sdk,postman请求测试:3、贴出关键的java集成类:importcn.hutool.json.JSONObject;importcn.hutool.json.JSONUtil;importcom.ewa......
  • vue3cron表达式
     引用:js部分importcmCronfrom'../../components/cmCron/index.vue';constshortcuts=[     {      text:"每天8点和12点(自定义追加)",      value:"008,12**?"     }    ]; 模板部分: ......
  • 基于React和Ant Design的公用组件设计与封装
    在现代前端开发中,React与AntDesign(以下简称AntD)是开发企业级应用的常用组合。公用组件的设计与封装对于提高开发效率、减少重复代码以及提升应用的可维护性至关重要。本文将围绕设计原则、组件拆分颗粒度、以及如何在React和AntD项目中进行公用组件的封装展开探讨。一、设计原则......
  • schema-change-implement
    TiDB的异步schema变更实现背景现在一般数据库在进行DDL操作时都会锁表,导致线上对此表的DML操作全部进入等待状态(有些数据支持读操作,但是也以消耗大量内存为代价),即很多涉及此表的业务都处于阻塞状态,表越大,影响时间越久。这使得DBA在做此类操作前要做足准备,然后挑个天时......