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()
使用默认级别,范围从0
到9
)。
解压缩数据
使用 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()
使用默认级别,范围从0
到9
)。
解压缩数据
使用 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()
使用默认级别,范围从0
到9
)。
解压缩数据
使用 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 中添加依赖: [dependencies] flate2 "1.0.34"主要模块 flate2::write:用于压缩数据的写入器。flate2::re…...

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

Node.js——fs模块-文件读取
1、文件读取:通过程序从文件中去除其中的数据 2、方法 方法 说明 readFile 异步读取 readFileSync 同步读取 createReadStrean 流式读取 3、readFile 异步读取 语法: 本文的分享到此结束,欢迎大家评论区一同讨论学习,下一…...
深入理解 ZooKeeper:分布式协调服务的核心与应用
一、引言 随着互联网技术的飞速发展,分布式系统的规模和复杂性不断增加。在分布式环境中,各个节点之间需要进行高效的协调和通信,以确保系统的正常运行。ZooKeeper 正是为了解决分布式系统中的协调问题而诞生的一款开源软件。它提供了一种简单…...
你竟然还不了解 LDAP?
目录 什么是 LDAP LDAP 的工作原理 LDAP 的数据模型 LDAP 操作 LDAP 的使用场景 常见的 LDAP 服务器 小结 什么是 LDAP LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是用于访问和管理目录服务的一种开放协议&…...

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

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

一般无人机和FPV无人机的区别
文章目录 一般无人机的工作原理关键组件:一般无人机的应用领域一般无人机的操控体验 FPV无人机的工作原理关键组件: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 一.触发器 作用:当检测到某种数据表发生数据变化时,自动执行操作,保证数据的完整性,保证数据的一致性。 1.创建一个触发器 如上图所示,查看这个create的帮助信息的时候,这个create trig…...

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

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

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

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

外包功能测试就干了4周,技术退步太明显了。。。。。
先说一下自己的情况,大专生,21年通过校招进入武汉某软件公司,干了差不多3个星期的功能测试,那年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了4周的功…...
外观模式及运用场景
外观模式(Facade Pattern)是一种结构性设计模式,它为复杂子系统提供一个统一的接口,从而简化与这些子系统的交互。通过外观模式,客户端可以更轻松地使用复杂系统,而不必了解其内部实现。接下来,…...

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

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

gem5运行简单RISC-V全系统模拟
简单记录gem5中运行最简单的RISC-V Full System Simulation的过程 首先是编译RISC-V和m5term,这部分不多写了,官网均有对应教程。 之后直接使用官方在configs/example/gem5_library目录下的riscv-fs.py 运行如下命令 ./build/RISCV/gem5.opt configs/…...
洛谷 P1195 口袋的天空
自用。 题目传送门:口袋的天空 - 洛谷 题解:Inori_333 参考题解:题解 P1195 【口袋的天空】 - 洛谷专栏 /*P1195 口袋的天空https://www.luogu.com.cn/problem/P11952024/11/03 submit:inori333 */#include <iostream> #include &…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...