nodejs 使用 zlib 压缩 字符串

本文介绍了如何在Node.js中使用`util`,`zlib`,和`fs`模块进行字符串的deflate(zlib)和brotli压缩以及解压操作,包括基本用法和通过文件读取进行压缩内容的处理。
摘要由CSDN通过智能技术生成

示例代码

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();
    })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值