示例代码
const util = require('util');
const zlib = require('zlib');
const fs = require('fs');
const path = require('path');
function buildOriStr() {
let o = {};
for (let i = 0; i < 50; i++) {
o[i] = Math.floor(Math.random() * 10 + 1);
}
return JSON.stringify(o);
}
/**
* 1. 使用 deflate inflate 压缩解压普通字符串
*/
async function func1() {
console.log("\x1b[32m%s\x1b[0m", "------ 1. 使用 deflate inflate 压缩解压普通字符串 ------");
// 原始字符串
let oriStr = buildOriStr();
console.log("\x1b[34m%s\x1b[0m", "- 原始字符串: ", oriStr);
// 压缩
let deflateStr = (await util.promisify(zlib.deflate)(oriStr)).toString('base64');
console.log("\x1b[34m%s\x1b[0m", "- 压缩后字符串: ", deflateStr);
// 解压
let inflateStr = (await util.promisify(zlib.inflate)(Buffer.from(deflateStr.toString(), 'base64'))).toString();
console.log("\x1b[34m%s\x1b[0m", "- 解压后字符串: ", inflateStr);
}
/**
* 2. 使用 brotliCompress brotliDecompress 压缩解压普通字符串
*/
async function func2() {
console.log("\x1b[32m%s\x1b[0m", "------ 2. 使用 brotliCompress brotliDecompress 压缩解压普通字符串 ------");
// 原始字符串
let oriStr = buildOriStr();
console.log("\x1b[34m%s\x1b[0m", "- 原始字符串: ", oriStr);
// 压缩
let deflateStr = (await util.promisify(zlib.brotliCompress)(oriStr)).toString('base64');
console.log("\x1b[34m%s\x1b[0m", "- 压缩后字符串: ", deflateStr);
// 解压
let inflateStr = (await util.promisify(zlib.brotliDecompress)(Buffer.from(deflateStr.toString(), 'base64'))).toString();
console.log("\x1b[34m%s\x1b[0m", "- 解压后字符串: ", inflateStr);
}
/**
* 3. 使用 brotliCompress brotliDecompress 压缩解压字符串 通过文件读取压缩内容
*/
async function func3() {
console.log("\x1b[32m%s\x1b[0m", "------ 3. 使用 brotliCompress brotliDecompress 压缩解压字符串 通过文件读取压缩内容 ------");
// 原始字符串
let oriStr = buildOriStr();
console.log("\x1b[34m%s\x1b[0m", "- 原始字符串: ", oriStr);
let deflateStr = (await util.promisify(zlib.brotliCompress)(oriStr)).toString('base64');
console.log("\x1b[34m%s\x1b[0m", "- 压缩后字符串: ", deflateStr);
// 写入临时文件
fs.writeFileSync(path.join(__dirname, './func3Temp'), deflateStr);
// 从临时文件读取
let d = fs.readFileSync(path.join(__dirname, './func3Temp'));
let inflateStr = (await util.promisify(zlib.brotliDecompress)(Buffer.from(d.toString(), 'base64'))).toString();
console.log("\x1b[34m%s\x1b[0m", "- 解压后字符串: ", inflateStr);
}
async function main() {
await func1();
await func2();
await func3();
}
main()
.catch((err) => {
console.error(err)
})
.finally(() => {
process.exit();
})