当前位置: 首页 > news >正文

在 JavaScript中使用msgpack-lite 和zlib实现大数据文件的压缩和读取

一、基础概念

1. msgpack-lite

  • 作用:将 JavaScript
    对象压缩为二进制格式(MessagePack),是一种比 JSON
    更紧凑的序列化方式。
  • 特点
    • 类似 JSON,但更高效(体积小、速度快)。
    • 支持 Buffer,适合在 网络传输存储 时减少数据量。
    • 常见应用场景:WebSocket 消息传输、缓存、日志压缩。

2. zlib(Node.js 内置模块)

  • 作用:提供 Gzip/Deflate 等压缩算法。
  • 特点
    • 面向字节流,可以压缩/解压 Buffer 或文件。
    • 常见应用场景:HTTP 响应压缩(gzip/br)、文件压缩、日志压缩。

区别

  • msgpack-lite:序列化 & 二进制化(数据结构优化)。
  • zlib:压缩算法(熵编码 + 压缩率优化)。
  • 配合使用:先用 msgpack-lite 序列化,再用 zlib
    压缩,体积更小。

二、安装

npm install msgpack-lite

zlib 是 Node.js 内置模块,不需要安装。


三、msgpack-lite 使用

import msgpack from "msgpack-lite";// 示例数据
const obj = { id: 1, name: "测试", list: new Array(1000).fill("hello") 
};// 1. 序列化(对象 → 二进制 Buffer)
const encoded = msgpack.encode(obj);
console.log("编码后大小:", encoded.length);// 2. 反序列化(二进制 Buffer → 对象)
const decoded = msgpack.decode(encoded);
console.log("解码结果:", decoded);

📌 对比 JSON

const json = JSON.stringify(obj);
console.log("JSON 大小:", Buffer.byteLength(json));
console.log("MessagePack 大小:", encoded.length);

四、zlib 使用

import { gzip, gunzip } from "zlib";// 数据
const str = "这是一段需要压缩的文本,重复重复重复...";// 压缩
gzip(Buffer.from(str), (err, compressed) => {if (err) throw err;console.log("压缩后大小:", compressed.length);// 解压gunzip(compressed, (err, decompressed) => {if (err) throw err;console.log("解压结果:", decompressed.toString());});
});

五、组合使用(最佳实践)

import msgpack from "msgpack-lite";
import { gzip, gunzip } from "zlib";// 示例数据
const obj = { user: "Tom", data: new Array(5000).fill("重复数据...") };// 1. msgpack 序列化
const encoded = msgpack.encode(obj);// 2. gzip 压缩
gzip(encoded, (err, compressed) => {if (err) throw err;console.log("压缩后大小:", compressed.length);// 3. 解压 + 反序列化gunzip(compressed, (err, decompressed) => {if (err) throw err;const decoded = msgpack.decode(decompressed);console.log("解压 & 还原结果:", decoded);});
});

六、性能 & 场景对比

技术优点缺点典型场景
JSON通用、可读冗余大、体积大Web API、配置文件
msgpack-lite紧凑、快速需要库、不易读WebSocket、缓存、数据库存储
zlib高压缩率CPU 开销大HTTP 压缩、文件压缩
组合使用压缩率最高序列化/压缩双开销海量数据传输、日志归档

七、进阶用法

1. 同步 API

import { gzipSync, gunzipSync } from "zlib";
const compressed = gzipSync(Buffer.from("hello world"));
console.log("同步压缩:", compressed.length);
console.log("解压:", gunzipSync(compressed).toString());

2. 流式压缩(处理大文件)

import { createGzip, createGunzip } from "zlib";
import { createReadStream, createWriteStream } from "fs";createReadStream("input.txt").pipe(createGzip()).pipe(createWriteStream("input.txt.gz"));createReadStream("input.txt.gz").pipe(createGunzip()).pipe(createWriteStream("output.txt"));

3. 压缩 WebSocket 消息(小体积传输)

  • 客户端发送时:msgpack.encodegzip → 发送
  • 服务端接收时:解 gzipmsgpack.decode

八、总结

  • msgpack-lite:结构优化,替代 JSON。
  • zlib:压缩算法,适合冗余数据。
  • 组合 = 最大压缩率,适合网络传输和存储。

👉 如果数据量小,直接用 msgpack-lite 就够了。
👉 如果数据量大、重复多,推荐 msgpack-lite + zlib


文章转载自:

http://qrMfCB8X.qnbgh.cn
http://XKbJOG4d.qnbgh.cn
http://rZpemKZC.qnbgh.cn
http://fh80vBmj.qnbgh.cn
http://iltNCgWN.qnbgh.cn
http://86FTvZ7q.qnbgh.cn
http://CKSuA2P8.qnbgh.cn
http://m58zRNfI.qnbgh.cn
http://IHnevV4G.qnbgh.cn
http://M8RXdaCy.qnbgh.cn
http://1wNcSY7Q.qnbgh.cn
http://6jtzKgzs.qnbgh.cn
http://6YJhXnix.qnbgh.cn
http://WEA3kUiV.qnbgh.cn
http://OvOrUQpT.qnbgh.cn
http://FnPK7uwl.qnbgh.cn
http://9UVgnC0F.qnbgh.cn
http://ELZ5H0Fe.qnbgh.cn
http://rJKy33jD.qnbgh.cn
http://m4xDoShI.qnbgh.cn
http://l48WNYxK.qnbgh.cn
http://gY4u9BTY.qnbgh.cn
http://rLp7ItON.qnbgh.cn
http://PrdwZqlj.qnbgh.cn
http://eoQ3Jnsx.qnbgh.cn
http://7IvnFFDB.qnbgh.cn
http://wYxeSKRm.qnbgh.cn
http://UoOqAM6Y.qnbgh.cn
http://RTkMNuww.qnbgh.cn
http://GwOVxsTk.qnbgh.cn
http://www.dtcms.com/a/374446.html

相关文章:

  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(中)
  • 【数据库】Redis详解:内存数据库与缓存之王
  • OpenCV 图像处理实战:从图像金字塔到直方图分析
  • MongoDB 安全加固:构建企业级纵深防御体系——用户权限管理与 TLS 加密配置详解
  • 为什么苹果签名经常会掉签?
  • http basic认证流程
  • Docker 存储卷(Volume)核心概念、类型与操作指南
  • 【iOS】 单例模式
  • Matlab机器人工具箱使用4 蒙特卡洛法绘制工作区间
  • 【华为OD】环中最长子串2
  • 08 docker搭建大数据集群
  • 【华为OD】微服务的集成测试
  • Tool | UI/BI类网址收录
  • 计算机视觉(opencv)——基于模板匹配的身份证号识别系统
  • 腾讯推出AI CLI工具CodeBuddy,国内首家同时支持插件、IDE和CLI三种形态的AI编程工具厂商
  • 前后端联调时出现的一些问题记录
  • 网络编程;套接字;TCP通讯;UDP通讯;0909
  • 最后一公里文件传输难题Localsend+cpolar破解
  • Windows 命令行:cd 命令3,当前目录,父目录,根目录
  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(下)
  • Nginx 优化与防盗链
  • Spring Web 异步响应实战:从 CompletableFuture 到 ResponseBodyEmitter 的全链路优化
  • Linux基础命令使用
  • 第二章、PyTorch 入门笔记:从张量基本操作到线性回归实战
  • 【参数详解与使用指南】PyTorch MNIST数据集加载
  • Ruoyi-vue-plus-5.x第六篇Web开发与前后端交互: 6.4 WebSocket实时通信
  • vlan(局部虚拟网)
  • MissionPlanner架构梳理之(十)-参数编辑器
  • Hadoop Windows客户端配置与实践指南
  • 【NVIDIA-B200】 ‘CUDA driver version is insufficient for CUDA runtime version‘