当前位置: 首页 > 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 &…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

Linux入门(十五)安装java安装tomcat安装dotnet安装mysql

安装java yum install java-17-openjdk-devel查找安装地址 update-alternatives --config java设置环境变量 vi /etc/profile #在文档后面追加 JAVA_HOME"通过查找安装地址命令显示的路径" #注意一定要加$PATH不然路径就只剩下新加的路径了&#xff0c;系统很多命…...

claude3.7高阶玩法,生成系统架构图,国内直接使用

文章目录 零、前言一、操作指南操作指导 二、提示词模板三、实战图书管理系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 在线考试系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 四、感受 零、前言 现在很多AI大模型可以…...

OCC笔记:TDF_Label中有多个相同类型属性

注&#xff1a;OCCT版本&#xff1a;7.9.1 TDF_Label中有多个相同类型的属性的方案 OCAF imposes the restriction that only one attribute type may be allocated to one label. It is necessary to take into account the design of the application data tree. For exampl…...