更新 'plugins/gzip.js'

master
src48597962 8 months ago
parent ec45347209
commit 09f5efbbea
  1. 222
      plugins/gzip.js

@ -10,182 +10,60 @@ const ByteArrayOutputStream = java.io.ByteArrayOutputStream;
const ByteArrayInputStream = java.io.ByteArrayInputStream; const ByteArrayInputStream = java.io.ByteArrayInputStream;
const Deflater = java.util.zip.Deflater; const Deflater = java.util.zip.Deflater;
//远程依赖 function zip(text, mode) {
//require("https://cdn.bootcdn.net/ajax/libs/pako/2.1.0/pako.es5.min.js"); mode = mode ? mode : "gzip";
//仓库: let baseStr = new javaString(text);
require("http://hiker.nokia.press/hikerule/rulelist.json?id=6974"); // 使用 ByteArrayOutputStream 来捕获压缩后的数据
var baos = new ByteArrayOutputStream();
//javascript if (mode == "deflate") {
function uint8ArrayToBase64(uint8Array) { var deflater = new java.util.zip.Deflater();
var binaryString = String.fromCharCode.apply(null, Array.from(uint8Array)); deflater.setLevel(java.util.zip.Deflater.BEST_COMPRESSION);
return window0.btoa(binaryString); var dos = new java.util.zip.DeflaterOutputStream(baos, deflater);
} dos.write(baseStr.getBytes("UTF-8"));
function zip(str, mode) { dos.finish(); // 完成压缩
mode = mode ? mode : "gzip"; dos.close();
var arr = [] } else {
if (mode == "gzip") { var gzos = new java.util.zip.GZIPOutputStream(baos);
arr = pako.gzip((str), { gzos.write(baseStr.getBytes("UTF-8"));
to: 'string' gzos.close(); // 关闭压缩流
});
} else if (mode == "deflate") {
arr = pako.deflate((str), {
to: 'string'
});
}
return uint8ArrayToBase64(arr);
}
function unzip(b64Data) {
let strData = window0.atob(b64Data);
const charData = strData.split('').map(function (x) {
return x.charCodeAt(0);
});
const binData = new Uint8Array(charData);
const data = pako.inflate(binData);
//strData = String.fromCharCode.apply(null, new Uint16Array(data));
return Utf8ArrayToStr(data);
}
function Utf8ArrayToStr(array) {
var out, i, len, c;
var char2, char3;
out = "";
len = array.length;
i = 0;
while (i < len) {
c = array[i++];
switch (c >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
out += String.fromCharCode(c);
break;
case 12:
case 13:
char2 = array[i++];
out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f));
break;
case 14:
char2 = array[i++];
char3 = array[i++];
out += String.fromCharCode(
((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0)
);
break;
} }
} // 将压缩后的数据转换为 Base64 编码的字符串
return out; var compressedData = baos.toByteArray();
} var base64String = java.util.Base64.getEncoder().encodeToString(compressedData);
//javascript
function zipForJava(text, mode) {
mode = mode ? mode : "gzip";
let baseStr = new javaString(text);
// 使用 ByteArrayOutputStream 来捕获压缩后的数据
var baos = new ByteArrayOutputStream();
if (mode == "deflate") {
var deflater = new java.util.zip.Deflater();
deflater.setLevel(java.util.zip.Deflater.BEST_COMPRESSION);
var dos = new java.util.zip.DeflaterOutputStream(baos, deflater);
dos.write(baseStr.getBytes("UTF-8"));
dos.finish(); // 完成压缩
dos.close();
} else {
var gzos = new java.util.zip.GZIPOutputStream(baos);
gzos.write(baseStr.getBytes("UTF-8"));
gzos.close(); // 关闭压缩流
}
// 将压缩后的数据转换为 Base64 编码的字符串
var compressedData = baos.toByteArray();
var base64String = java.util.Base64.getEncoder().encodeToString(compressedData);
// 关闭 ByteArrayOutputStream // 关闭 ByteArrayOutputStream
baos.close(); baos.close();
return String(base64String); return String(base64String);
} }
function unzipForJava(text, mode) { function unzip(text, mode) {
mode = mode ? mode : "gzip"; mode = mode ? mode : "gzip";
var compressedData = Base64.getDecoder().decode(text); var compressedData = Base64.getDecoder().decode(text);
var bais = new ByteArrayInputStream(compressedData); var bais = new ByteArrayInputStream(compressedData);
var baos = new ByteArrayOutputStream(); var baos = new ByteArrayOutputStream();
var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024); var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024);
if (mode == "gzip") { if (mode == "gzip") {
var gis = new GZIPInputStream(bais); var gis = new GZIPInputStream(bais);
let len; let len;
while ((len = gis.read(buffer)) != -1) { while ((len = gis.read(buffer)) != -1) {
baos.write(buffer, 0, len); baos.write(buffer, 0, len);
}
gis.close();
} else if (mode == "deflate") {
var iis = new InflaterInputStream(bais);
let len;
while ((len = iis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
iis.close();
} }
gis.close(); bais.close();
} else if (mode == "deflate") { baos.close();
var iis = new InflaterInputStream(bais); var decompressedString = new javaString(baos.toByteArray(), "UTF-8");
let len; // 打印解压缩后的字符串
while ((len = iis.read(buffer)) != -1) { return String(decompressedString);
baos.write(buffer, 0, len);
}
iis.close();
}
bais.close();
baos.close();
var decompressedString = new javaString(baos.toByteArray(), "UTF-8");
// 打印解压缩后的字符串
return String(decompressedString);
} }
$.exports = {
const Gzip = { zip,
islog: false, unzip
env: "java",
mode: "gzip",
log: function (input) {
if (this.islog) {
log(input)
}
},
zip(text, mode) {
this.log("----------分割线----------")
this.log("方法:压缩")
this.log("模式:" + this.mode)
this.log("文本数量:" + text.length)
var s = new Date().getTime();
var result;
if (this.env == "java") {
this.log("环境:" + this.env)
result = zipForJava(text, mode || this.mode)
var e = new Date().getTime();
this.log("耗时:" + (e - s))
this.log("压缩后:" + result.length)
return result;
}
this.log("环境:" + this.env)
result = zip(text, mode || this.mode);
var e = new Date().getTime();
this.log("耗时:" + (e - s))
this.log("压缩后:" + result.length)
return result;
},
unzip(text, mode) {
this.log("----------分割线----------")
this.log("方法:解压")
this.log("模式:" + this.mode)
this.log("文本数量:" + text.length)
var s = new Date().getTime();
var result;
if (this.env == "java") {
this.log("环境:" + this.env)
result = unzipForJava(text, mode || this.mode);
var e = new Date().getTime();
this.log("耗时:" + (e - s))
this.log("解压后:" + result.length)
return result;
}
this.log("环境:" + this.env)
result = unzip(text, mode || this.mode);
var e = new Date().getTime();
this.log("耗时:" + (e - s))
this.log("解压后:" + result.length)
return result
}
}; };
Loading…
Cancel
Save