Rufus压缩解压:多种压缩格式支持
概述
Rufus作为一款功能强大的USB启动盘制作工具,其内置的BLED(Base Library for Easy Decompression)压缩解压库提供了对多种主流压缩格式的全面支持。这个功能使得Rufus能够直接处理压缩的镜像文件,无需用户预先解压,大大简化了启动盘制作流程。
支持的压缩格式
Rufus通过BLED库支持以下9种主流压缩格式:
| 压缩格式 | 文件扩展名 | 枚举值 | 特点 |
|---|---|---|---|
| ZIP | .zip | BLED_COMPRESSION_ZIP |
最常见的归档格式,支持多文件打包 |
| LZW | .Z | BLED_COMPRESSION_LZW |
Unix系统传统压缩格式 |
| GZIP | .gz | BLED_COMPRESSION_GZIP |
GNU压缩格式,常用于Linux系统 |
| LZMA | .lzma | BLED_COMPRESSION_LZMA |
7-Zip核心算法,高压缩比 |
| BZIP2 | .bz2 | BLED_COMPRESSION_BZIP2 |
Burrows-Wheeler算法,适合文本压缩 |
| XZ | .xz | BLED_COMPRESSION_XZ |
LZMA2算法,Linux发行版常用 |
| 7ZIP | .7z | BLED_COMPRESSION_7ZIP |
7-Zip归档格式(目前不支持) |
| VTSI | .vtsi | BLED_COMPRESSION_VTSI |
特定压缩格式 |
| ZSTD | .zst | BLED_COMPRESSION_ZSTD |
Facebook开发的现代压缩算法 |
技术架构
BLED库核心结构
BLED库采用模块化设计,每个压缩格式都有对应的解压器函数:
typedef long long int(*unpacker_t)(transformer_state_t *xstate);
unpacker_t unpacker[BLED_COMPRESSION_MAX] = {
unpack_none, // BLED_COMPRESSION_NONE
unpack_zip_stream, // BLED_COMPRESSION_ZIP
unpack_Z_stream, // BLED_COMPRESSION_LZW
unpack_gz_stream, // BLED_COMPRESSION_GZIP
unpack_lzma_stream, // BLED_COMPRESSION_LZMA
unpack_bz2_stream, // BLED_COMPRESSION_BZIP2
unpack_xz_stream, // BLED_COMPRESSION_XZ
unpack_none, // BLED_COMPRESSION_7ZIP (暂不支持)
unpack_vtsi_stream, // BLED_COMPRESSION_VTSI
unpack_zstd_stream, // BLED_COMPRESSION_ZSTD
};
解压流程
Rufus的解压处理遵循标准化的流程:
flowchart TD
A[选择压缩镜像文件] --> B[检测压缩格式类型]
B --> C{格式支持检查}
C -->|不支持| D[报错并退出]
C -->|支持| E[初始化BLED库]
E --> F[创建解压器状态结构]
F --> G[打开源文件和目标文件]
G --> H[调用对应解压器函数]
H --> I[实时解压数据]
I --> J[写入目标设备]
J --> K[完成解压]
核心API功能
BLED库提供了多种解压接口以满足不同场景需求:
1. 文件到文件解压
int64_t bled_uncompress(const char* src, const char* dst, int type);
将压缩文件src解压到目标文件dst,适用于标准文件操作。
2. Windows句柄解压
int64_t bled_uncompress_with_handles(HANDLE hSrc, HANDLE hDst, int type);
使用Windows文件句柄进行解压,提供更好的系统集成。
3. 文件到内存解压
int64_t bled_uncompress_to_buffer(const char* src, char* buf, size_t size, int type);
将压缩文件直接解压到内存缓冲区,适合小文件快速处理。
4. 压缩包目录提取
int64_t bled_uncompress_to_dir(const char* src, const char* dir, int type);
从压缩包中提取所有文件到指定目录(目前仅支持ZIP格式)。
5. 内存到内存解压
int64_t bled_uncompress_from_buffer_to_buffer(
const char* src, const size_t src_len,
char* dst, size_t dst_len, int type);
在内存中直接进行压缩数据解压,无需文件I/O操作。
性能优化特性
缓冲区管理
BLED库使用256KB的缓冲区大小,这是经过优化的默认值:
// ZSTD最小缓冲区要求:128KB + 3字节
// 因此设置缓冲区为256KB
uint32_t BB_BUFSIZE = 0x40000; // 256KB
错误处理机制
采用setjmp/longjmp实现统一的错误处理:
if (setjmp(bb_error_jmp))
goto err; // 跳转到错误处理
进度回调支持
支持进度回调函数,便于GUI界面显示解压进度:
typedef void (*progress_t)(const uint64_t read_bytes);
实际应用场景
场景1:直接使用压缩镜像制作启动盘
用户无需手动解压ISO镜像,Rufus自动检测并处理:
.iso.gz- 压缩的Linux发行版镜像.img.xz- 压缩的磁盘镜像文件.zip- 包含多个文件的归档镜像
场景2:网络下载压缩镜像处理
Rufus支持从网络下载的压缩镜像直接写入USB设备,减少中间步骤。
场景3:内存受限环境解压
对于资源受限的环境,可以使用内存到内存解压API,避免磁盘I/O开销。
使用示例
基本文件解压
// 初始化BLED库
bled_init(0, NULL, NULL, NULL, NULL, NULL, NULL);
// 解压.gz文件到目标文件
int64_t result = bled_uncompress("linux.iso.gz", "linux.iso", BLED_COMPRESSION_GZIP);
// 清理资源
bled_exit();
带进度显示的解压
void progress_callback(const uint64_t read_bytes) {
printf("已解压: %llu 字节\n", read_bytes);
}
bled_init(0, printf, NULL, NULL, progress_callback, NULL, NULL);
bled_uncompress("image.img.xz", "image.img", BLED_COMPRESSION_XZ);
技术优势
- 格式兼容性广:支持9种主流压缩格式,覆盖绝大多数使用场景
- 性能优化:256KB缓冲区大小平衡了内存使用和解压速度
- 错误恢复:统一的错误处理机制确保操作稳定性
- 进度反馈:支持实时进度回调,提升用户体验
- 内存友好:提供内存到内存解压接口,减少磁盘I/O
注意事项
- 7ZIP格式限制:目前
.7z格式尚未实现解压支持 - 缓冲区要求:自定义缓冲区大小必须是2的幂次方且不小于256KB
- 线程安全:BLED库不是线程安全的,需要在单线程环境中使用
- 资源清理:使用后必须调用
bled_exit()释放资源
总结
Rufus的压缩解压功能通过BLED库实现了对多种压缩格式的全面支持,为用户提供了便捷的一站式启动盘制作体验。无论是常见的ZIP、GZIP格式,还是专业的LZMA、XZ格式,Rufus都能高效处理,大大简化了用户的操作流程。
其模块化的设计和丰富的API接口使得压缩解压功能既强大又灵活,既能满足基本的文件解压需求,也能支持高级的内存操作和进度监控,体现了Rufus作为专业工具的技术深度和用户体验关怀。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00