内容简介:项目中遇到一个场景:需要将一批数据发送到APP端,且实际应用场景中,对数据的长度有一定的限制,于是就需要用到字符串压缩。APP端使用所有示例代码可以在
记一次字符串压缩操作
项目中遇到一个场景:需要将一批数据发送到APP端,且实际应用场景中,对数据的长度有一定的限制,于是就需要用到字符串压缩。
APP端使用 Java
,后端使用 Golang
,使用 gzip
压缩,同时涉及到了 base64
编码,中文和西欧字符集转码。
过程描述
-
后端:
- 字符集转换 参考自: 一个复杂的中文编码问题
- 压缩字符串
- 使用base64编码为可见字符
- 网络传输
-
APP端
- 接收网络响应
- base64解码,得到一个字节数组(压缩的)
- gzip读取压缩的字节流,解压缩
- 转码为中文
示例代码
所有示例代码可以在 这里 找到
- server端
func compress(s string) string { //使用GBK字符集encode gbk, err := simplifiedchinese.GBK.NewEncoder().Bytes([]byte(s)) if err != nil { logrus.Error(err) return "" } //转为ISO8859_1,也就是latin1字符集 latin1, err := charmap.ISO8859_1.NewDecoder().Bytes(gbk) if err != nil { return "" } //使用gzip压缩 var buf bytes.Buffer zw := gzip.NewWriter(&buf) _, err = zw.Write(latin1) if err != nil { logrus.Fatal(err) } if err := zw.Close(); err != nil { logrus.Fatal(err) } //使用base64编码 encoded := base64.StdEncoding.EncodeToString(buf.Bytes()) fmt.Println(encoded) return encoded }
- APP端
private static String uncompress(String s) throws IOException { //base64 decode byte[] byteArray = Base64.getDecoder().decode(s); ByteArrayInputStream bis = new ByteArrayInputStream(byteArray); //gzip解压 GZIPInputStream gis = new GZIPInputStream(bis); BufferedReader br = new BufferedReader(new InputStreamReader(gis, "UTF-8")); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); gis.close(); bis.close(); //使用latin1字符集获得bytes byte[] latin1 = sb.toString().getBytes("ISO_8859_1"); //转换回GBK return new String(latin1, "GBK"); }
使用base64编码,主要是因为经过gzip压缩后数据,直接转成字符串的话,会有很多不可见字符,这样在传输过程中,通常会被服务端框架转义,从而失真。
代码仅作为示例使用,实际业务编码请注意检查错误和异常等。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 查找一个字符串中最长不含重复字符的子字符串,计算该最长子字符串的长度
- 字符串、字符处理总结
- 高频算法面试题(字符串)leetcode 387. 字符串中的第一个唯一字符
- php删除字符串最后一个字符
- (三)C语言之字符串与字符串函数
- 算法笔记字符串处理问题H:编排字符串(2064)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP项目开发全程实录
清华大学出版社 / 2008 / 56.00元
《软件项目开发全程实录丛书•PHP项目开发全程实录:DVD17小时语音视频讲解(附光盘1张)》主要特色: (1)12-32小时全程语音同步视频讲解,目前市场上唯一的“全程语音视频教学”的案例类 图书,培训数千元容,尽在一盘中! (2)10套“应用系统”并公开全部“源代码”,誓将案例学习进行到底! (3)丛书总计80个应用系统300个应用模块。 (4)含5000页SQL se......一起来看看 《PHP项目开发全程实录》 这本书的介绍吧!