文件模式适合压缩体积较大的内容,文本模式方便直接粘贴。
输入内容后点「开始压缩」。
上传 .gz 文件或粘贴 Base64。
| 格式 | 说明 | 常见用途 |
|---|---|---|
| gzip | 带 gzip 头与 CRC32 校验,最通用 | HTTP 传输、.gz 文件、日志归档 |
| deflate | zlib 封装(带头与 Adler32) | PDF 流、PNG 内部数据、部分协议 |
| deflate-raw | 纯压缩数据,无封装头 | 需要自己处理封装的底层场景 |
⚠️ 说明:本工具使用浏览器原生的 CompressionStream / DecompressionStream 完成压缩解压,全程在你的浏览器本地完成,文件与文本不会上传到任何服务器。
它只处理数据流本身,不负责打包:如果你想把多个文件打成 .gz 或 .zip 压缩包,需要先做打包(tar / zip)再压缩,本工具不提供打包功能。
超大文件(数百 MB)可能在浏览器内占用较多内存,建议分批处理。
后端同学发来一段 gzip 过的 Base64 要你解开看看,或者你想知道一段 JSON 压完到底能省多少流量——以前要么开终端敲命令,要么找个不知名的在线站把数据传上去。
现在的浏览器自带压缩能力:CompressionStream 一行就能压,不用引任何库,数据也不用离开你的电脑。
能做什么:
① 压缩:粘贴文本或选文件,输出 Base64 或直接下载 .gz;
② 解压:上传 .gz 或粘贴 Base64,解回原文;
③ 三种格式:gzip / deflate / deflate-raw;
④ 压缩率:原始大小、压缩后大小、省了多少百分比、耗时多久。
典型场景:
· 解一段后端返回的 Content-Encoding: gzip 数据;
· 把大 JSON 压成 Base64 塞进 URL 或配置文件;
· 估算开启 gzip 后接口能省多少流量;
· 解压别人发来的 .gz 日志。
一个要分清的概念:gzip 只压缩「一段数据」,不打包「多个文件」。想把一堆文件变成一个压缩包,得先 tar 或 zip 打包,再 gzip 压缩——本工具只做后半段。
怎么实现:
① 能力检测:先看 `typeof CompressionStream !== 'undefined'`,不支持的浏览器(较旧的 Safari / Firefox)直接给出明确提示,不静默失败;
② 压缩:把输入做成 `Blob` → `blob.stream().pipeThrough(new CompressionStream(fmt))` → `new Response(stream).blob()` 拿到结果;全程流式,不会把整份数据一次性摊在内存里;
③ Base64:结果 Blob 转 `Uint8Array`,分块拼接成二进制字符串再 `btoa`,避免 `String.fromCharCode` 一次吃太大导致爆栈;
④ 解压:反向走 `DecompressionStream`,结果按 UTF-8 `TextDecoder` 解成文本;
⑤ 统计:用 `performance.now()` 记耗时,用字节数算压缩率 `1 - after / before`。
它不做:不打包多文件、不生成 tar/zip、不设置压缩级别(浏览器 API 未开放)、不校验 CRC 之外的完整性。
tar 打包(得到 .tar)再 gzip(得到 .tar.gz),或者直接用 zip(zip 本身自带打包 + 压缩)。审核通过后就会展示在留言板上,稍安勿躁~
还没有留言,来抢沙发吧!