记:后端对字符串进行gzip压缩,前端js进行gzip解压
2024-09-18 21:06:09
最近有个需求要求对长字符串进行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);
最新文章
- 转:Webpack 指南(整理 草稿)
- c++头文件 #include<;iostream>;
- EntityFramework查询--联合查询(Join,GroupJoin)
- Hibernate 学习笔记一
- hdu 2232 矩阵 ***
- ACM 谁获得了最高奖学金
- Spring基础——在 IOC 容器中 Bean 之间的关系
- 如何解决php 生成验证码图片不显示问题
- Servlet技术
- Android activity四种基本启动模式
- jQuery 判断是否为数字的方法 及 转换数字函数
- [Leetcode][Python]48: Rotate Image
- Android游戏开发研究帧动画实现
- SxsTrace程序追踪 &;&; 错误信息分析
- 基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作
- 【转】5 Best Place to Learn Linux – Linux Tutorial Sites
- win7下通过easyBCD引导安装Ubuntu16.04(并处理遇到的坑)
- FlowerVisor理解
- css中元素border属性的构成以及配合属性值transparent可得到一些特殊形状1.0
- NETGEAR WNDR3800CH openwrt 不能用新版, Barrier Breaker 14.07
热门文章
- Spingboot 程序在linux 上发布
- ES字段类型
- Windows家庭版安装本地组策略编辑器【gpedit.msc】
- JZOJ 3252. 【GDOI三校联考】炸弹
- iview表单验证
- 代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
- nvm作用、下载、使用、常见问题
- GeoServer发布Oracle空间数据
- GeoServer发布MySQL空间数据
- ThreadLocal及常用场景