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作为专业工具的技术深度和用户体验关怀。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00