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

[复制链接]
发表于 2025-12-31 16:21:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
媒介

flate2 是 Rust 中用于处理惩罚 gzip 和其他压缩格式的库。以下是 flate2 的告急 API 和用法分析。
依靠添加

在你的 Cargo.toml 中添加依靠:
  1. [dependencies]
  2. flate2 = "1.0.34"
复制代码
告急模块


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

使用 GzEncoder
  1. use flate2::write::GzEncoder;
  2. use flate2::Compression;
  3. use std::fs::File;
  4. use std::io::{self, BufWriter, Write};
  5. fn compress_file(input: &str, output: &str) -> io::Result<()> {
  6.     let input_file = File::open(input)?;
  7.     let output_file = File::create(output)?;
  8.     let mut encoder = GzEncoder::new(output_file, Compression::default());
  9.     let mut buffer = std::io::BufReader::new(input_file);
  10.     std::io::copy(&mut buffer, &mut encoder)?;
  11.     encoder.finish()?;
  12.     Ok(())
  13. }
复制代码

  • GzEncoder:用于将数据压缩为 gzip 格式。
  • Compression:用于指定压缩级别(Compression::default() 使用默认级别,范围从 0 到 9)。
解压缩数据

使用 GzDecoder
  1. use flate2::read::GzDecoder;
  2. use std::fs::File;
  3. use std::io::{self, BufReader, Write};
  4. fn decompress_file(input: &str, output: &str) -> io::Result<()> {
  5.     let input_file = File::open(input)?;
  6.     let output_file = File::create(output)?;
  7.     let mut decoder = GzDecoder::new(input_file);
  8.     let mut buffer = std::io::BufWriter::new(output_file);
  9.     std::io::copy(&mut decoder, &mut buffer)?;
  10.     Ok(())
  11. }
复制代码

  • GzDecoder:用于将 gzip 格式的数据解压缩。
在内存中举行压缩息争压缩

压缩数据到 Vec
  1. use flate2::write::GzEncoder;
  2. use flate2::Compression;
  3. fn compress_data(data`flate2` 是 Rust 中用于处理 gzip 和其他压缩格式的库。以下是 `flate2` 的主要 API 和用法说明。
  4. ### 1. 依赖添加
  5. 在你的 `Cargo.toml` 中添加依赖:
  6. ```toml
  7. [dependencies]
  8. flate2 = "1.0"
复制代码
告急模块


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

使用 GzEncoder
  1. use flate2::write::GzEncoder;
  2. use flate2::Compression;
  3. use std::fs::File;
  4. use std::io::{self, BufWriter, Write};
  5. fn compress_file(input: &str, output: &str) -> io::Result<()> {
  6.     let input_file = File::open(input)?;
  7.     let output_file = File::create(output)?;
  8.     let mut encoder = GzEncoder::new(output_file, Compression::default());
  9.     let mut buffer = std::io::BufReader::new(input_file);
  10.     std::io::copy(&mut buffer, &mut encoder)?;
  11.     encoder.finish()?;
  12.     Ok(())
  13. }
复制代码

  • GzEncoder:用于将数据压缩为 gzip 格式。
  • Compression:用于指定压缩级别(Compression::default() 使用默认级别,范围从 0 到 9)。
解压缩数据

使用 GzDecoder
  1. use flate2::read::GzDecoder;
  2. use std::fs::File;
  3. use std::io::{self, BufReader, Write};
  4. fn decompress_file(input: &str, output: &str) -> io::Result<()> {
  5.     let input_file = File::open(input)?;
  6.     let output_file = File::create(output)?;
  7.     let mut decoder = GzDecoder::new(input_file);
  8.     let mut buffer = std::io::BufWriter::new(output_file);
  9.     std::io::copy(&mut decoder, &mut buffer)?;
  10.     Ok(())
  11. }
复制代码

  • GzDecoder:用于将 gzip 格式的数据解压缩。
在内存中举行压缩息争压缩

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


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

使用 GzEncoder
  1. use flate2::write::GzEncoder;
  2. use flate2::Compression;
  3. use std::fs::File;
  4. use std::io::{self, BufWriter, Write};
  5. fn compress_file(input: &str, output: &str) -> io::Result<()> {
  6.     let input_file = File::open(input)?;
  7.     let output_file = File::create(output)?;
  8.     let mut encoder = GzEncoder::new(output_file, Compression::default());
  9.     let mut buffer = std::io::BufReader::new(input_file);
  10.     std::io::copy(&mut buffer, &mut encoder)?;
  11.     encoder.finish()?;
  12.     Ok(())
  13. }
复制代码

  • GzEncoder:用于将数据压缩为 gzip 格式。
  • Compression:用于指定压缩级别(Compression::default() 使用默认级别,范围从 0 到 9)。
解压缩数据

使用 GzDecoder
  1. use flate2::read::GzDecoder;
  2. use std::fs::File;
  3. use std::io::{self, BufReader, Write};
  4. fn decompress_file(input: &str, output: &str) -> io::Result<()> {
  5.     let input_file = File::open(input)?;
  6.     let output_file = File::create(output)?;
  7.     let mut decoder = GzDecoder::new(input_file);
  8.     let mut buffer = std::io::BufWriter::new(output_file);
  9.     std::io::copy(&mut decoder, &mut buffer)?;
  10.     Ok(())
  11. }
复制代码

  • GzDecoder:用于将 gzip 格式的数据解压缩。
5. 在内存中举行压缩息争压缩

压缩数据到 Vec
  1. use flate2::write::GzEncoder;
  2. use flate2::Compression;
  3. fn compress_data( &[u8]) -> Vec<u8> {
  4.     let mut encoder = GzEncoder::new(Vec::new(), Compression::default());
  5.     encoder.write_all(data).expect("Failed to write data");
  6.     encoder.finish().expect("Failed to finish compression")
  7. }
复制代码
解压缩 Vec
  1. use flate2::read::GzDecoder;
  2. fn decompress_data( &[u8]) -> Vec<u8> {
  3.     let mut decoder = GzDecoder::new(data);
  4.     let mut decompressed_data = Vec::new();
  5.     decoder.read_to_end(&mut decompressed_data).expect("Failed to read decompressed data");
  6.     decompressed_data
  7. }
复制代码
API 概述


  • GzEncoder:用于 gzip 压缩的结构体。
  • GzDecoder:用于 gzip 解压缩的结构体。
  • Compression:压缩级别的设置,包罗以下选项:

    • Compression::none()
    • Compression::fast()
    • Compression::default()
    • Compression::best()
    • Compression::custom(level):自界说级别。

错误处理惩罚

全部 I/O 操纵都返回 io::Result<()>,在调用时可以使用 ? 运算符来处理惩罚错误。
示例
  1. fn main() -> io::Result<()> {
  2.     let input = "example.txt";
  3.     let compressed_output = "example.gz";
  4.     let decompressed_output = "decompressed.txt";
  5.     compress_file(input, compressed_output)?;
  6.     println!("Compression complete");
  7.     decompress_file(compressed_output, decompressed_output)?;
  8.     println!("Decompression complete");
  9.     Ok(())
  10. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表