接口實現后台GZIP壓縮,pako.js 前端解壓



import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class GZIPUtils {
/**
* 字符串的壓縮
*
* @param str
* 待壓縮的字符串
* @return 返回壓縮后的字符串
* @throws IOException
*/
public static String compress(String str) throws IOException {
if (null == str || str.length() <= 0) {
return null;
}
// 創建一個新的 byte 數組輸出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 使用默認緩沖區大小創建新的輸出流
GZIPOutputStream gzip = new GZIPOutputStream(out);
// 將 b.length 個字節寫入此輸出流
gzip.write(str.getBytes("UTF-8"));
gzip.close();
// 使用指定的 charsetName,通過解碼字節將緩沖區內容轉換為字符串
return out.toString("ISO-8859-1");
}

/**
* 字符串的解壓
*
* @param b
* 對字符串解壓
* @return 返回解壓縮后的字符串
* @throws IOException
*/
public static String unCompress(byte[] b) {
try {
if (null == b || b.length <= 0) {
return null;
}
// 創建一個新的 byte 數組輸出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
// 創建一個 ByteArrayInputStream,使用 buf 作為其緩沖區數組
ByteArrayInputStream in;
in = new ByteArrayInputStream(b);

// 使用默認緩沖區大小創建新的輸入流
GZIPInputStream gzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n = 0;
while ((n = gzip.read(buffer)) >= 0) {// 將未壓縮數據讀入字節數組
// 將指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此 byte數組輸出流
out.write(buffer, 0, n);
}
// 使用指定的 charsetName,通過解碼字節將緩沖區內容轉換為字符串
return out.toString("UTF-8");

} catch (Exception e) {
e.printStackTrace();
}
return null;
}

}



String encodeStr = URLEncoder.encode(JSON.toJSONString(buildMenuTree(menus)), "UTF-8");
encodeStr = Base64.encodeBase64String(encodeStr.getBytes("UTF-8"));

String menuCompressStr = GZIPUtils.compress(encodeStr);


前端js

//data為后台返回的值
JSON.parse(unzip(data));
// 解壓
function unzip(key) {
var charData = [];
var keyArray = key.split('');
for(var i = 0; i < keyArray.length; i++){
var item = keyArray[i];
charData.push(item.charCodeAt(0));
}

// var binData = new Uint8Array(charData);
// console.log('Uint8Array:' + binData);
// 解壓
// var data = pako.inflate(binData);
var data = pako.inflate(charData);

// 將GunZip ByTAREAR轉換回ASCII字符串
// key = String.fromCharCode.apply(null, new Uint16Array(data));

key = String.fromCharCode.apply(null, data);

return decodeURIComponent(Base64.decode(key));
}


// 壓縮
function zip(str) {
//escape(str) --->壓縮前編碼,防止中午亂碼
var binaryString = pako.gzip(escape(str), { to: 'string' });
return binaryString;
}

需要pako.min.js文件的郵箱留言


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM