最近有个需求要求对长字符串进行gzip压缩,然后在js进行解压缩的操作:

public static void main(String[] args) {
try {
String longString = "www.baidu.com";
// GZIP压缩后的数据
byte[] compress = compress(longString.getBytes());
//通过Base64转成字符串
String longStringEncoded = Base64.getEncoder().encodeToString(compress);
} catch (IOException e) {
e.printStackTrace();
}
}

public static byte[] compress(byte[] data) throws IOException {
if (data == null || data.length == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(data);
gzip.close();
return out.toByteArray();
}

public static byte[] uncompress(byte[] data) throws IOException {
if (data == null || data.length == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
GZIPInputStream gzip = new GZIPInputStream(inputStream);
byte[] buffer = new byte[256];
int n;
while ((n = gzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
gzip.close();
inputStream.close();
return out.toByteArray();
}
//后端压缩后的字符串
let encodeDpUrl = 'H4sIAAAAAAAAACsvL9dLSsxMKdVLzs8FAA3FGxcNAAAA';
//Base64解码
let gzipUrl = atob(encodeDpUrl);
// 将二进制字符串转换为字符数字数组
let charData = gzipUrl.split('').map(function (x) { return x.charCodeAt(0); });
//将数字数组转换为字节数组
let binData = new Uint8Array(charData);
//unzip 需要引入 pako.js文件 https://github.com/nodeca/pako
var data = pako.inflate(binData);
// 将字节数组转字符串
let longString = String.fromCharCode.apply(null, new Uint16Array(data));
console.info(longString);
记:url编码解码问题
//后端进行url编码,
String encodeUrl = URLEncoder.encode(要编码的URL, Constant.ENCODING_UTF_8);
// 前端进行url解码
let decodeURI = decodeURIComponent(要解码的URL);

最新文章

  1. 转:Webpack 指南(整理 草稿)
  2. c++头文件 #include<iostream>
  3. EntityFramework查询--联合查询(Join,GroupJoin)
  4. Hibernate 学习笔记一
  5. hdu 2232 矩阵 ***
  6. ACM 谁获得了最高奖学金
  7. Spring基础——在 IOC 容器中 Bean 之间的关系
  8. 如何解决php 生成验证码图片不显示问题
  9. Servlet技术
  10. Android activity四种基本启动模式
  11. jQuery 判断是否为数字的方法 及 转换数字函数
  12. [Leetcode][Python]48: Rotate Image
  13. Android游戏开发研究帧动画实现
  14. SxsTrace程序追踪 && 错误信息分析
  15. 基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作
  16. 【转】5 Best Place to Learn Linux – Linux Tutorial Sites
  17. win7下通过easyBCD引导安装Ubuntu16.04(并处理遇到的坑)
  18. FlowerVisor理解
  19. css中元素border属性的构成以及配合属性值transparent可得到一些特殊形状1.0
  20. NETGEAR WNDR3800CH openwrt 不能用新版, Barrier Breaker 14.07

热门文章

  1. Spingboot 程序在linux 上发布
  2. ES字段类型
  3. Windows家庭版安装本地组策略编辑器【gpedit.msc】
  4. JZOJ 3252. 【GDOI三校联考】炸弹
  5. iview表单验证
  6. 代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
  7. nvm作用、下载、使用、常见问题
  8. GeoServer发布Oracle空间数据
  9. GeoServer发布MySQL空间数据
  10. ThreadLocal及常用场景