Snappy使用
Snappy使用
Snappy是谷歌开源的压缩和解压的开发包,目标在于实现高速的压缩而不是最大的压缩
项目地址:GitHub - google/snappy:快速压缩器/解压缩器
Cmake版本升级
该项目需要比较新的cmake,CMake 3.16.3 or higher is required,所以回出现如下错误,更新cmake就可以
CMake Error at third_party/benchmark/CMakeLists.txt:1 (cmake_minimum_required):CMake 3.16.3 or higher is required. You are running version 3.10.2
查看当前版本
cmake -version
删除安装的Cmake(最好直接删除路径下的Cmake,免得卸载Cmake出现多个库的问题)
搜索cmake路径which cmake
切换到cmake路径cd /usr/bin/
删除cmakesudo rm cmake
下载高版本cmake:Index of /files/v3.18 (cmake.org)

解压安装包
tar xf cmake-3.18.3.tar.gz安装cmake
cd cmake-3.18.3
sudo apt-get install libssl-dev build-essential
./configure
make
sudo make install
将编译的cmake复制到原始删除cmake的路径下
sudo cp bin/Cmake /usr/bin/
Snappy编译
1、克隆代码库
git clone https://github.com/google/snappy.git
2、编译代码库
git submodule update --init
mkdir build
cd build && cmake ../ && make
调用
C++ 程序使用Snappy,需要包含对应的链接库,
请包含来自 您的调用文件,并链接到已编译的库、头文件,最简单的方法
压缩:snappy::Compress(input.data(), input.size(), &output);
解压:snappy::Uncompress(input.data(), input.size(), &output);
示例,将Snappy编译好的libsnappy.a,snappy.h,snappy-stubs-public.h三个文件放在同一路径下

新建test.cpp测试程序,如下
#include <iostream>
#include "snappy.h"
#include <string.h>using namespace std;int main()
{string input = "this is the demo for Snappy\n";//repeat three timesfor(int i=0; i<3; i++){input += input;}cout << "origin:" << input.size() << endl;cout << input << endl;cout << "#########################################\n\n" << endl;string Compress_output = "";snappy::Compress(input.data(), input.size(), &Compress_output); cout << "compress:" << Compress_output.size() << endl;cout << Compress_output << endl;cout << "#########################################\n\n" << endl;string UnCompress_output = "";snappy::Uncompress(Compress_output.data(), Compress_output.size(), &UnCompress_output);cout << "uncompress:" << UnCompress_output.size() << endl;cout << UnCompress_output << endl;return 1;
}
编译执行
g++ test.cpp libsnappy.a -std=gnu++11 -o test
./test

压缩前224个字节,压缩后42个字节
相关文章:
Snappy使用
Snappy使用 Snappy是谷歌开源的压缩和解压的开发包,目标在于实现高速的压缩而不是最大的压缩 项目地址:GitHub - google/snappy:快速压缩器/解压缩器 Cmake版本升级 该项目需要比较新的cmake,CMake 3.16.3 or higher is requi…...
跨越重洋:在Heroku上配置Pip镜像源的终极指南
🌐 跨越重洋:在Heroku上配置Pip镜像源的终极指南 Heroku是一个支持多种编程语言的云平台即服务(PaaS),它允许开发者部署和管理应用程序。然而,由于Heroku的服务器位于海外,直接使用Python的包管…...
SpringBoot + 虚拟线程,性能炸裂!
一、什么是虚拟线程 虚拟线程是Java19开始增加的一个特性,和Golang的携程类似,一个其它语言早就提供的、且如此实用且好用的功能,作为一个Java开发者,早就已经望眼欲穿了。 二、虚拟线程和普通线程的区别 “虚拟”线程…...
Java Character类
Character是char的包装类 转义序列 Character类的方法...
Python中的爬虫实战:猫眼电影爬虫
随着互联网技术的快速发展,网络上的信息量越来越庞大。猫眼电影作为国内领先的电影数据平台,为用户提供了全面的电影信息服务。本文将介绍如何利用python编写简单的猫眼电影爬虫,获取电影相关数据。 爬虫概述 爬虫,即网络爬虫&a…...
WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新
在智能时代的浪潮汹涌澎湃之际,算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业,华院计算在人工智能的广阔天地中,不断探索、创新,致力于将算法的潜力发挥到极致。在过去的时日里,华院计算不断探索…...
数据库原理之数据库基本概念
目录 前言 基本概念 数据库完整性 前言 今天我们来看看数据库的基本概念,帮助大家对数据库有一点点最基本的了解 基本概念 4个基本概念 数据data:描述事物的符号,数据库中存储的基本对象。 数据库Database:长期存储在计算机…...
vue2项目的打包以及部署
打包 当我们写好vue2的项目后,可以通过npm build来对项目进行打包 npm build 打包完成后我们可以看到在当面目录下生成了dis目录,src下的文件都会被打包进这个目录里,当然打包后的文件我们不能直接在浏览器打开,需要进行部署 部署 1.新建一个…...
Java的全局异常处理代码
第一步:先写一个异常管理类: package com.example.firefighting.exceptions;import com.example.firefighting.utils.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerA…...
Hi3861 OpenHarmony嵌入式应用入门--LiteOS semaphore作为锁
CMSIS 2.0 接口中的 Semaphore(信号量)是用于嵌入式系统中多线程或中断服务例程(ISR)之间同步和共享资源保护的重要机制。Semaphore 是一种用于控制对多个共享资源访问的同步机制。它可以被看作是一个计数器,用于跟踪可…...
注意!年龄越大,社交圈子越窄?其实这是老人的理性选择!数学家告诉你:何时该跳槽,何时该坚守!你必须知道的三个智慧:让你的人生更加精彩!
我们到底应该在什么情况下探索新事物,什么情况下专注于已有的东西呢?本质上来说,这个问题就是在询问,你究竟应该耗费精力去探索新的信息,还是专注从既有的信息中获取收获? 有人采访了临终的老人,…...
[SwiftUI 开发] 嵌套的ObservedObject中的更改不会更新UI
1. 发生问题的demo 业务逻辑代码 class Address: ObservableObject {Published var street "123 Apple Street"Published var city "Cupertino" }class User: ObservableObject {Published var name "Tim Cook"Published var address Addr…...
全面了解机器学习
目录 一、基本认识 1. 介绍 2. 机器学习位置 二、机器学习的类型 1. 监督学习 2. 无监督学习 3. 强化学习 三、机器学习术语 1. 训练样本 2. 训练 3. 特征 4. 目标 5. 损失函数 四、机器学习流程 五、机器学习算法 1. 分类算法 2. 聚类算法 3. 关联分析 4. …...
作为图形渲染API,OpenGL和Direct3D的全方位对比。
当你在网页看到很多美轮美奂的图形效果,3D交互效果,你知道是如何实现的吗?当然是借助图形渲染API了,说起这个不就不得说两大阵营,OpenGL和Direct3D,贝格前端工场在本文对二者做个详细对比。 一、什么是图形…...
安装Rabbitmq遇到的坑
!!!一定要对号版本号 不同的虚拟机unbontu、cetenos和不同的erlang和不同的rabbitmq之间要对应下载对应版本 下面给出我的版本centos7erlangrabbitmq 分割线 安装好后,如果在虚拟机的服务器上可以打开,在本地浏览器…...
React+TS 从零开始教程(4):useEffect
上一节传送门:ReactTS 从零开始教程(3):useState 源码链接:https://pan.quark.cn/s/c6fbc31dcb02 上一节,我们已经学会了React的第一个Hook:useState。 这一节,我们要学习的是另一…...
网络安全学习路线图(2024版详解)
近期,大家在网上对于网络安全讨论比较多,想要学习的人也不少,但是需要学习哪些内容,按照什么顺序去学习呢?其实我们已经出国多版本的网络安全学习路线图,一直以来效果也比较不错,本次我们针对市…...
你了解人工智能吗?
前言 人工智能(Artificial Intelligence,AI)是计算机科学的一个重要分支,致力于开发能够执行通常需要人类智能的任务的系统。本文将从历史发展、关键技术、应用领域以及未来挑战等方面,深入探讨人工智能的相关内容。 …...
如何使用Vue.js实现动态文档生成与下载功能
在现代Web应用开发中,用户往往需要在浏览器端完成复杂的操作,如生成和下载特定格式的文档,而无需服务器直接干预。本文将以一个Vue.js应用程序为例,详细介绍如何利用axios(或自定义请求模块)结合FileReader…...
web基础及http协议
一、WEB:就是我们所说的页面,点开的每个页面都是web。(全球广域网、万维网) 分布式图形信息系统:同一个服务,但是部署在不同的机器上且提供的服务和内容全部一致,集群就是建立在分布式的基础上。…...
Vue 3项目性能优化:给你的Live2D看板娘‘瘦身’并加速加载的3个实用技巧
Vue 3项目性能优化:Live2D看板娘轻量化与加速加载实战指南 当你的博客或展示型网站成功集成了Live2D看板娘后,是否遇到过页面加载变慢、资源过大或移动端体验不佳的问题?作为一位长期在Vue项目中优化动态元素性能的开发者,我深知在…...
R语言实战:用sf和ggplot2绘制带比例尺和指北针的专业地图(附完整代码)
R语言地理信息可视化实战:从数据到专业地图的完整指南 地理信息数据可视化是科研和商业分析中不可或缺的一环。无论是环境监测、城市规划还是流行病学研究,将空间数据转化为直观的地图都能极大提升数据洞察力。本文将手把手教你使用R语言中的sf和ggplot2…...
开源工具高效获取B站无损音质:3大核心流程掌握Hi-Res音频下载
开源工具高效获取B站无损音质:3大核心流程掌握Hi-Res音频下载 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mi…...
旋变信号处理中的相位问题:如何用仿真工具分析并补偿滤波电路带来的相移
旋变信号相位补偿实战:从仿真到硬件设计的全链路解决方案 电机控制系统中,旋转变压器(旋变)作为高精度位置传感器,其信号质量直接影响闭环控制性能。然而工程师们常遇到一个棘手问题——旋变反馈信号与激励信号之间的…...
FreeRTOS系统时钟节拍配置指南:从1ms到100ms如何选择最优心跳频率(含STM32F4实测数据)
FreeRTOS系统时钟节拍配置实战:从理论到STM32F4调优全解析 在嵌入式实时操作系统领域,系统时钟节拍如同人体心跳般重要——它决定了系统处理延时、超时等时间相关事件的精度与效率。对于使用FreeRTOS的开发者而言,时钟节拍频率的选择绝非简单…...
Jetson AGX Orin避坑指南:从换源到编译Torchvision,我踩过的那些ARM架构的‘坑’
Jetson AGX Orin避坑实战:ARM架构下的深度学习环境搭建血泪史 第一次把Jetson AGX Orin拿到手时,我天真地以为这不过是一台"加强版树莓派"。直到连续三天被各种404 Not Found、Illegal instruction (core dumped)和No matching distribution f…...
DNS区域传送漏洞详解:从原理到防御(以Bind9为例)
DNS区域传送漏洞深度解析与BIND9安全加固实战指南 当你在浏览器输入一个网址时,背后发生的DNS查询过程就像一场精密的交响乐演出。而区域传送(Zone Transfer)作为DNS系统中的关键机制,本应是乐谱中协调各声部的指挥棒,…...
终极Slick轮播图与React结合指南:10个组件化开发实践技巧
终极Slick轮播图与React结合指南:10个组件化开发实践技巧 【免费下载链接】slick the last carousel youll ever need 项目地址: https://gitcode.com/GitHub_Trending/sl/slick Slick轮播图插件是现代前端开发中最强大、最灵活的轮播组件之一,被…...
影墨·今颜模型在网络安全教学中的应用:生成网络拓扑与攻击场景示意图
影墨今颜模型在网络安全教学中的应用:生成网络拓扑与攻击场景示意图 网络安全教学一直有个难题:很多概念太抽象了。你跟学生讲“中间人攻击”,讲“DDoS流量”,或者讲“防火墙策略”,他们脑子里可能只有一堆文字&#…...
别再只盯着模型了!Ansys SI/PI仿真中,用对IBIS的Pin Import才能抓准封装寄生效应
Ansys SI/PI仿真进阶:IBIS模型导入中Pin Import的封装寄生效应精准控制 在高速电路设计中,仿真结果的准确性往往决定了产品的成败。许多工程师花费大量时间优化PCB布局和模型参数,却忽略了IBIS模型导入这一关键环节对仿真精度的决定性影响。特…...
