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

rust 压缩解压库flate2保姆级教程

前言

flate2 是 Rust 中用于处理 gzip 和其他压缩格式的库。以下是 flate2 的主要 API 和用法说明。

依赖添加

在你的 Cargo.toml 中添加依赖:

[dependencies]
flate2 = "1.0.34"

主要模块

  • flate2::write:用于压缩数据的写入器。
  • flate2::read:用于解压缩数据的读取器。
  • flate2::Compression:指定压缩级别的枚举。

压缩数据

使用 GzEncoder
use flate2::write::GzEncoder;
use flate2::Compression;
use std::fs::File;
use std::io::{self, BufWriter, Write};fn compress_file(input: &str, output: &str) -> io::Result<()> {let input_file = File::open(input)?;let output_file = File::create(output)?;let mut encoder = GzEncoder::new(output_file, Compression::default());let mut buffer = std::io::BufReader::new(input_file);std::io::copy(&mut buffer, &mut encoder)?;encoder.finish()?;Ok(())
}
  • GzEncoder:用于将数据压缩为 gzip 格式。
  • Compression:用于指定压缩级别(Compression::default() 使用默认级别,范围从 09)。

解压缩数据

使用 GzDecoder
use flate2::read::GzDecoder;
use std::fs::File;
use std::io::{self, BufReader, Write};fn decompress_file(input: &str, output: &str) -> io::Result<()> {let input_file = File::open(input)?;let output_file = File::create(output)?;let mut decoder = GzDecoder::new(input_file);let mut buffer = std::io::BufWriter::new(output_file);std::io::copy(&mut decoder, &mut buffer)?;Ok(())
}
  • GzDecoder:用于将 gzip 格式的数据解压缩。

在内存中进行压缩和解压缩

压缩数据到 Vec
use flate2::write::GzEncoder;
use flate2::Compression;fn compress_data(data`flate2` 是 Rust 中用于处理 gzip 和其他压缩格式的库。以下是 `flate2` 的主要 API 和用法说明。### 1. 依赖添加在你的 `Cargo.toml` 中添加依赖:```toml
[dependencies]
flate2 = "1.0"

主要模块

  • flate2::write:用于压缩数据的写入器。
  • flate2::read:用于解压缩数据的读取器。
  • flate2::Compression:指定压缩级别的枚举。

压缩数据

使用 GzEncoder
use flate2::write::GzEncoder;
use flate2::Compression;
use std::fs::File;
use std::io::{self, BufWriter, Write};fn compress_file(input: &str, output: &str) -> io::Result<()> {let input_file = File::open(input)?;let output_file = File::create(output)?;let mut encoder = GzEncoder::new(output_file, Compression::default());let mut buffer = std::io::BufReader::new(input_file);std::io::copy(&mut buffer, &mut encoder)?;encoder.finish()?;Ok(())
}
  • GzEncoder:用于将数据压缩为 gzip 格式。
  • Compression:用于指定压缩级别(Compression::default() 使用默认级别,范围从 09)。

解压缩数据

使用 GzDecoder
use flate2::read::GzDecoder;
use std::fs::File;
use std::io::{self, BufReader, Write};fn decompress_file(input: &str, output: &str) -> io::Result<()> {let input_file = File::open(input)?;let output_file = File::create(output)?;let mut decoder = GzDecoder::new(input_file);let mut buffer = std::io::BufWriter::new(output_file);std::io::copy(&mut decoder, &mut buffer)?;Ok(())
}
  • GzDecoder:用于将 gzip 格式的数据解压缩。

在内存中进行压缩和解压缩

压缩数据到 Vec
use flate2::write::GzEncoder;
use flate2::Compression;fn compress_data( &[u8]) -> Vec<u8> {let mut encoder = GzEncoder::new(Vec::new(), Compression::default());encoder.write_all(data).expect("Failed to write data");encoder.finish().expect("Failed to finish compression")
}
解压缩 Vec
use flate2::read::GzDecoder;fn decompress_data(data`flate2` 是 Rust 中用于处理 gzip 和其他压缩格式的库。以下是 `flate2` 的主要 API 和用法说明。### 1. 依赖添加在你的 `Cargo.toml` 中添加依赖:```toml
[dependencies]
flate2 = "1.0"

主要模块

  • flate2::write:用于压缩数据的写入器。
  • flate2::read:用于解压缩数据的读取器。
  • flate2::Compression:指定压缩级别的枚举。

压缩数据

使用 GzEncoder
use flate2::write::GzEncoder;
use flate2::Compression;
use std::fs::File;
use std::io::{self, BufWriter, Write};fn compress_file(input: &str, output: &str) -> io::Result<()> {let input_file = File::open(input)?;let output_file = File::create(output)?;let mut encoder = GzEncoder::new(output_file, Compression::default());let mut buffer = std::io::BufReader::new(input_file);std::io::copy(&mut buffer, &mut encoder)?;encoder.finish()?;Ok(())
}
  • GzEncoder:用于将数据压缩为 gzip 格式。
  • Compression:用于指定压缩级别(Compression::default() 使用默认级别,范围从 09)。

解压缩数据

使用 GzDecoder
use flate2::read::GzDecoder;
use std::fs::File;
use std::io::{self, BufReader, Write};fn decompress_file(input: &str, output: &str) -> io::Result<()> {let input_file = File::open(input)?;let output_file = File::create(output)?;let mut decoder = GzDecoder::new(input_file);let mut buffer = std::io::BufWriter::new(output_file);std::io::copy(&mut decoder, &mut buffer)?;Ok(())
}
  • GzDecoder:用于将 gzip 格式的数据解压缩。

5. 在内存中进行压缩和解压缩

压缩数据到 Vec
use flate2::write::GzEncoder;
use flate2::Compression;fn compress_data( &[u8]) -> Vec<u8> {let mut encoder = GzEncoder::new(Vec::new(), Compression::default());encoder.write_all(data).expect("Failed to write data");encoder.finish().expect("Failed to finish compression")
}
解压缩 Vec
use flate2::read::GzDecoder;fn decompress_data( &[u8]) -> Vec<u8> {let mut decoder = GzDecoder::new(data);let mut decompressed_data = Vec::new();decoder.read_to_end(&mut decompressed_data).expect("Failed to read decompressed data");decompressed_data
}

API 概述

  • GzEncoder:用于 gzip 压缩的结构体。
  • GzDecoder:用于 gzip 解压缩的结构体。
  • Compression:压缩级别的设置,包含以下选项:
    • Compression::none()
    • Compression::fast()
    • Compression::default()
    • Compression::best()
    • Compression::custom(level):自定义级别。

错误处理

所有 I/O 操作都返回 io::Result<()>,在调用时可以使用 ? 运算符来处理错误。

示例

fn main() -> io::Result<()> {let input = "example.txt";let compressed_output = "example.gz";let decompressed_output = "decompressed.txt";compress_file(input, compressed_output)?;println!("Compression complete");decompress_file(compressed_output, decompressed_output)?;println!("Decompression complete");Ok(())
}

相关文章:

rust 压缩解压库flate2保姆级教程

前言 flate2 是 Rust 中用于处理 gzip 和其他压缩格式的库。以下是 flate2 的主要 API 和用法说明。 依赖添加 在你的 Cargo.toml 中添加依赖&#xff1a; [dependencies] flate2 "1.0.34"主要模块 flate2::write&#xff1a;用于压缩数据的写入器。flate2::re…...

秒杀优化(异步秒杀,基于redis-stream实现消息队列)

目录 秒杀优化一&#xff1a;异步秒杀1&#xff1a;思路2&#xff1a;实现 二&#xff1a;redis实现消息队列1&#xff1a;什么是消息队列2&#xff1a;基于list结构实现消息队列3&#xff1a;基于pubsub实现消息队列4&#xff1a;基于stream实现消息队列5&#xff1a;stream的…...

Node.js——fs模块-文件读取

1、文件读取&#xff1a;通过程序从文件中去除其中的数据 2、方法 方法 说明 readFile 异步读取 readFileSync 同步读取 createReadStrean 流式读取 3、readFile 异步读取 语法&#xff1a; 本文的分享到此结束&#xff0c;欢迎大家评论区一同讨论学习&#xff0c;下一…...

深入理解 ZooKeeper:分布式协调服务的核心与应用

一、引言 随着互联网技术的飞速发展&#xff0c;分布式系统的规模和复杂性不断增加。在分布式环境中&#xff0c;各个节点之间需要进行高效的协调和通信&#xff0c;以确保系统的正常运行。ZooKeeper 正是为了解决分布式系统中的协调问题而诞生的一款开源软件。它提供了一种简单…...

你竟然还不了解 LDAP?

目录 什么是 LDAP LDAP 的工作原理 LDAP 的数据模型 LDAP 操作 LDAP 的使用场景 常见的 LDAP 服务器 小结 什么是 LDAP LDAP&#xff08;Lightweight Directory Access Protocol&#xff0c;轻量级目录访问协议&#xff09;是用于访问和管理目录服务的一种开放协议&…...

宝塔使用clickhouse踩坑

前言 最近有个物联网项目&#xff0c;需要存储物联网终端发送过来的信息&#xff08;类似log日志&#xff0c;但又要存储在数据库里&#xff0c;方便后期聚合统计&#xff09;&#xff0c;本来想写文件的奈何客户要求聚合统计&#xff0c;所以只能用数据库才能达到更高的计算效…...

Linux命令学习记录

ls 查看文件资源&#xff0c;ls [选项] [路径] ls ls [单个选项] ls [组合选项]&#xff0c;选项的组合与顺序无关 ls --help 查看更多命令参数 clear 清屏 cd 更换工作目录&#xff0c;cd [路径] cd [特殊路径符] . 表示当前目录 .. …...

一般无人机和FPV无人机的区别

文章目录 一般无人机的工作原理关键组件&#xff1a;一般无人机的应用领域一般无人机的操控体验 FPV无人机的工作原理关键组件&#xff1a;FPV无人机的应用领域FPV无人机的操控体验性能特点FPV无人机的性能特点 未来无人机发展方向和通信方式拓展 一般无人机的工作原理 一般无…...

数据结构初阶排序全解

目录 1>>排序前言 2>>插入排序 2.1>>直接插入排序 2.2>>希尔排序 3>>选择排序 3.1>>直接选择排序 3.2>>堆排序 4>>交换排序 4.1冒泡排序 4.2快速排序 5>>归并排序 6>>测试 test.c sort.h sort.c 7…...

MySQL的SQL语句之触发器的创建和应用

触发器 Trigger 一.触发器 作用&#xff1a;当检测到某种数据表发生数据变化时&#xff0c;自动执行操作&#xff0c;保证数据的完整性&#xff0c;保证数据的一致性。 1.创建一个触发器 如上图所示&#xff0c;查看这个create的帮助信息的时候&#xff0c;这个create trig…...

myWebserver 介绍

项目总结 项目准备过程中&#xff0c;主要阅读了《Linux 高性能服务器编程》游双 一书。源码参考的是&#xff1a;TinyWebServer&#xff0c;我在此源码的基础上做了一定的优化和修改。 我的代码&#xff1a;Github: myWebserver: 我的C服务器项目 我的 Webserver 项目总结&…...

钉钉平台开发小程序

一、下载小程序开发者工具 官网地址&#xff1a;小程序开发工具 - 钉钉开放平台 客户端类型 下载链接 MacOS x64 https://ur.alipay.com/volans-demo_MiniProgramStudio-x64.dmg MacOS arm64 https://ur.alipay.com/volans-demo_MiniProgramStudio-arm64.dmg Windows ht…...

九识智能与徐工汽车达成战略合作,共绘商用车未来新蓝图

近日&#xff0c;九识智能与徐工汽车签署战略合作协议&#xff0c;标志着双方在智能驾驶技术与新能源商用车融合应用、联合生产及市场推广等方面迈入深度合作的新篇章&#xff0c;将共同引领智能驾驶技术商业化浪潮。 近年来&#xff0c;在国家智能化发展战略的引领下&#xff…...

Serverless + AI 让应用开发更简单

本文整理自 2024 云栖大会&#xff0c;阿里云智能高级技术专家&#xff0c;史明伟演讲议题《Serverless AI 让应用开发更简单》 随着云计算和人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;企业对于高效、灵活且成本效益高的解决方案的需求日益增长。本文旨在…...

外包功能测试就干了4周,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;21年通过校招进入武汉某软件公司&#xff0c;干了差不多3个星期的功能测试&#xff0c;那年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了4周的功…...

外观模式及运用场景

外观模式&#xff08;Facade Pattern&#xff09;是一种结构性设计模式&#xff0c;它为复杂子系统提供一个统一的接口&#xff0c;从而简化与这些子系统的交互。通过外观模式&#xff0c;客户端可以更轻松地使用复杂系统&#xff0c;而不必了解其内部实现。接下来&#xff0c;…...

PyQt5实战——多脚本集合包,UI以及工程布局(二)

个人博客&#xff1a;苏三有春的博客 系列往期&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; 布局 2.1 UI页面布局 整体框架分为分为三个部分&#xff0c;垂直分布。 第一个部分为功能选择按钮&#xff08;如UTF-8转换&#…...

Python 数据结构对比:列表与数组的选择指南

文章目录 &#x1f4af;前言&#x1f4af;Python中的列表&#xff08;list&#xff09;和数组&#xff08;array&#xff09;的详细对比1. 数据类型的灵活性2. 性能与效率3. 功能与操作4. 使用场景5. 数据结构选择的考量6. 实际应用案例7. 结论 &#x1f4af;小结 &#x1f4af…...

gem5运行简单RISC-V全系统模拟

简单记录gem5中运行最简单的RISC-V Full System Simulation的过程 首先是编译RISC-V和m5term&#xff0c;这部分不多写了&#xff0c;官网均有对应教程。 之后直接使用官方在configs/example/gem5_library目录下的riscv-fs.py 运行如下命令 ./build/RISCV/gem5.opt configs/…...

洛谷 P1195 口袋的天空

自用。 题目传送门&#xff1a;口袋的天空 - 洛谷 题解&#xff1a;Inori_333 参考题解&#xff1a;题解 P1195 【口袋的天空】 - 洛谷专栏 /*P1195 口袋的天空https://www.luogu.com.cn/problem/P11952024/11/03 submit:inori333 */#include <iostream> #include &…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...