压缩归档库-Snappy介绍

news/2024/5/20 17:17:21

1.简介

Snappy 是一个 C++ 编写的压缩和解压缩库,由 Google 开发。它专为速度而设计,而不是最大压缩率或与其他压缩库的兼容性。
Snappy 通常用于需要快速压缩和解压缩的场景。
Snappy具有以下属性:

  • 快速:压缩速度达到250 MB/秒及以上。
  • 稳定:Snappy在谷歌的生产环境中压缩和解压缩了数PB的数据。Snappy比特流格式是稳定的,不会在不同版本之间发生变化。
  • 鲁棒性:Snappy解压缩器的设计不会在面对损坏或恶意输入时崩溃。
  • 免费开源软件:Snappy是在BSD类型的许可证下获得许可的。

2.环境搭建

下载地址:https://github.com/google/snappy/tree/1.2.0
编译:下载完成后,解压缩,使用cmake编译。
在这里插入图片描述
这个时候会报错,googletest目录下找不到cmakelist文件。这个时候打开CMakeLists.txt修改,把以下两个地方注释掉,再重新编译生成库。
在这里插入图片描述
在这里插入图片描述
生成库如下图所示:
在这里插入图片描述
拷贝如下文件和lib文件到我们的demo工程中。
在这里插入图片描述
配置visual studio环境,请看Jsoncpp介绍。如何配置include、lib目录。

3.示例

压缩/解压缩数据。

#include <iostream>
#include <snappy.h>int main()
{// 原始数据std::string input = "This is a string that we want to compress using Snappy.";// 压缩数据std::string compressed;snappy::Compress(input.data(), input.size(), &compressed);std::cout << "Compressed size: " << compressed.size() << std::endl;// 解压缩数据std::string decompressed;if (!snappy::Uncompress(compressed.data(), compressed.size(), &decompressed)) {std::cerr << "Failed to decompress the data." << std::endl;return 1;}std::cout << "Decompressed data: " << decompressed << std::endl;return 0;
}

压缩/解压缩文件

#include <iostream>
#include <snappy.h>
#include <string>
#include <iostream>
#include <fstream>// 压缩文件
bool compressFile(const std::string& input_filename, const std::string& output_filename) 
{std::ifstream input(input_filename, std::ios::binary);if (!input.is_open()) {std::cerr << "Failed to open input file." << std::endl;return false;}std::string input_data((std::istreambuf_iterator<char>(input)), std::istreambuf_iterator<char>());input.close();std::string compressed;snappy::Compress(input_data.data(), input_data.size(), &compressed);std::ofstream output(output_filename, std::ios::binary);if (!output.is_open()) {std::cerr << "Failed to open output file." << std::endl;return false;}output.write(compressed.data(), compressed.size());output.close();return true;
}// 解压缩文件
bool decompressFile(const std::string& input_filename, const std::string& output_filename) 
{std::ifstream input(input_filename, std::ios::binary);if (!input.is_open()){std::cerr << "Failed to open input file." << std::endl;return false;}std::string compressed((std::istreambuf_iterator<char>(input)), std::istreambuf_iterator<char>());input.close();std::string decompressed;if (!snappy::Uncompress(compressed.data(), compressed.size(), &decompressed)) {std::cerr << "Failed to decompress the data." << std::endl;return false;}std::ofstream output(output_filename, std::ios::binary);if (!output.is_open()){std::cerr << "Failed to open output file." << std::endl;return false;}output.write(decompressed.data(), decompressed.size());output.close();return true;
}int main() 
{const std::string input_file = "E:/2.mp4";const std::string compressed_file = "E:/2.snappy";const std::string decompressed_file = "E:/3.mp4";// 压缩文件if (compressFile(input_file, compressed_file)) {std::cout << "File compressed successfully." << std::endl;}else {std::cerr << "Failed to compress file." << std::endl;return 1;}// 解压缩文件if (decompressFile(compressed_file, decompressed_file)) {std::cout << "File decompressed successfully." << std::endl;}else {std::cerr << "Failed to decompress file." << std::endl;return 1;}return 0;
}

4.更多参考

libVLC 专栏介绍-CSDN博客

Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍_qt opengl视频播放器-CSDN博客

QCharts -1.概述-CSDN博客

压缩和归档库-LZ4介绍
压缩和归档库-Zlib介绍


http://www.mrgr.cn/p/24543881

相关文章

安装oh-my-zsh(命令行工具)

目录一、安装zsh、git、wget二、安装运行脚本1、curl/wget下载2、手动下载三、切换主题1、编辑配置文件2、切换主题四、安装插件1、zsh-syntax-highlighting(高亮语法错误)2、zsh-autosuggestions(自动补全)五、更多优化配置 一、安装zsh、git、wget安装oh-my-zsh的前提需要…

CH592 蓝牙透传模块

设备架构串口透传协议说明 模块通过串口和用户MCU相连,建立用户MCU 和 BLE 设备之间的双向通讯。 用户可以通过串口,使用指定的AT指令对串口波特率、BLE连接间隔,以及不同的发包间隔,模块将会有不同的数据吞吐能力。 串口默认配置为 115200bps。 模块的串口Rx一次最大可输入…

TSINGSEE青犀视频边缘计算AI智能分析网关V4告警消息语音推送的配置流程

TSINGSEE青犀视频边缘计算硬件智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。今天我们来分享一下如何配置和使用AI智能分析网关V4的语音推送。 提前准备…

【UE5学习笔记】编辑及运行界面:关闭眼部识别(自动曝光)

自动曝光&#xff0c;也就是走进一个黑暗的环境&#xff0c;画面会逐渐变量&#xff0c;以模拟人眼进入黑暗空间时瞳孔放大&#xff0c;进光量增加的一种真实视觉感受&#xff1a; 制作过程中是否关闭自动曝光&#xff0c;取决于游戏的性质&#xff0c;但是个人认为&#xff0c…

项目冲刺——第三篇Scrum冲刺博客

作业所属课程 所属课程作业要求 作业要求作业目标 总结第二天的敏捷开发,安排好第三天敏捷开发冲刺一、站立式会议 1、会议图片2、昨天已完成的内容成员 任务肖杨、梁丽贤 完成注册登陆页面设计黄诃华、欧文杰 完成用户注册登陆功能姚佳如、李慧娣 完成发布帖子模块的设计廖莹…

93、动态规划-最长回文子串

思路 首先从暴力递归开始&#xff0c;回文首尾指针相向运动肯定想等。就是回文&#xff0c;代码如下&#xff1a; public String longestPalindrome(String s) {if (s null || s.length() 0) {return "";}return longestPalindromeHelper(s, 0, s.length() - 1);…

大模型微调实战之强化学习 贝尔曼方程及价值函数(五)

大模型微调实战之强化学习 贝尔曼方程及价值函数&#xff08;五&#xff09; 现在&#xff0c; 看一下状态-动作值函数的示意图&#xff1a; 这个图表示假设首先采取一些行动(a)。因此&#xff0c;由于动作&#xff08;a&#xff09;&#xff0c;代理可能会被环境转换到这些状…

团队作业4——项目冲刺 第3篇 Scrum 冲刺博客

这个作业属于哪个课程 软件工程这个作业要求在哪里 团队作业4——项目冲刺这个作业的目标 团队完成任务的分配,明确团队每个人在接下来七天敏捷冲刺的目标其他参考文献这个作业所属团队 SuperNewCode团队成员 张楠 曾琳备 黄铭涛 张小宇 周广1.每日举行站立时会议2.燃尽图3.每…

牛客NC97 字符串出现次数的TopK问题【中等 哈希+优先级队列 Java/Go】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/fd711bdfa0e840b381d7e1b82183b3ee 核心 哈希&#xff0c;优先级队列Java代码 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返…

计算机组成原理网课笔记

无符号整数的表示与运算 带符号整数的表示与运算 原反补码的特性对比 移码 定点小数

linux增加环境变量示例

首先,通过 vim ~/.bashrc 命令进入我这个用户的.bashrc文件内 然后在这个文件末尾添加环境变量,比如下面红框中的内容表示添加了路径/home/nfs_new/wangpeng/VSCode-linux-x64/bin为环境变量,实际上这里是把vscode启动命令添加作为环境变量了。其中, $PATH 表示之前所有的…

go学习笔记——Kratos框架

官方文档https://go-kratos.dev/en/docs/getting-started/start/1.安装Go 参考:mac安装go1.20 2.安装Kratos框架 kratos依赖protobuf grpc等框架,需要先进行安装brew install grpc brew install protobuf brew install protoc-gen-go brew install protoc-gen-go-grpc验证pro…

js逆向,参数加密js混淆

关键词 JS 混淆、源码乱码、参数动态加密 逆向目标 题目1&#xff1a;抓取所有&#xff08;5页&#xff09;机票的价格&#xff0c;并计算所有机票价格的平均值&#xff0c;填入答案。 目标网址&#xff1a;https://match.yuanrenxue.cn/match/1目标接口&#xff1a;https://ma…

【Linux】在Linux中执行命令ifconfig, 报错-bash:ifconfig: command not found解决方案

一、报错信息 ifconfig 报错-bash:ifconfig: command not found 同时&#xff0c;通过ip addr查看&#xff0c;也看不到IP信息 二、解决方案 找到ifcfg-ens0文件&#xff0c;此文件的目录在/etc/sysconfig/network-scripts目录下 命令&#xff1a;cd /etc/sysconfig/network…

m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真

1.算法仿真效果 matlab2022a仿真结果如下:遗传优化迭代过程:误码率对比:2.算法涉及理论知识概要低密度奇偶校验码(Low-Density Parity-Check Code, LDPC码)因其优越的纠错性能和近似香农极限的潜力,在现代通信系统中扮演着重要角色。归一化最小和(Normalized Min-Sum, NMS)…

Vue.js-----vue组件

能够说出vue生命周期能够掌握axios的使用能够了解$refs, $nextTick作用能够完成购物车案例 Vue 生命周期讲解 1.钩子函数 目标&#xff1a;Vue 框架内置函数&#xff0c;随着组件的生命周期阶段&#xff0c;自动执行 作用: 特定的时间点&#xff0c;执行特定的操作场景: 组…

交流接触器

一般按负载电流的1.5倍选择;

IPFoxy:什么是静态住宅IP?静态ISP代理指南

静态住宅代理&#xff08;也称为静态ISP代理&#xff09;是最流行的代理类型之一。它们也是隐藏您的身份并保持在线匿名的最佳方法之一。您为什么要使用住宅代理而不是仅使用常规代理服务&#xff1f;下面我具体分享。 一、什么是静态住宅代理&#xff1f; 首先&#xff0c;我…