lz4压缩

2023-05-16

收集的资料:

https://gitee.com/zhengnianli/EmbedSummary

lz4

在我们嵌入式开发中,通信中有些数据量较大的数据可以压缩之后再进行传输。

压缩算法有很多,常用的有如下几种:

  • lz4压缩算法
  • zstd压缩算法
  • xz压缩算法
  • gzip压缩算法

本次来介绍压缩界的速度之王——lz4压缩库。一些数据如:

lz4源码下载链接:

http://security.ubuntu.com/ubuntu/pool/main/l/lz4/

lz4的使用

首先,从上面的链接中下载源码进行编译:

 然后在源码根目录创建一个文件夹lz4_x86_lib:

 编译lz4:

makemake install PREFIX=$(pwd)/lz4_x86_lib

得到:

lz4库交叉编译可参照:https://blog.csdn.net/nh5431313/article/details/106387168

lz4库有几套压缩、解压接口,我们使用最简单的接口:

int LZ4_compress_default(const char* source, char* dest, int sourceSize, int maxDestSize);int LZ4_decompress_safe (const char* source, char* dest, int compressedSize, int maxDecompressedSize);

测试例子:

把字符串"12345678901234567890123456789012345678901234567890"进行lz4压缩,再解压,再把解压之后的内容打印出来。

编写测试代码:

// 微信公众号:嵌入式大杂烩#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/time.h>#include <time.h>#include "lz4.h"long long get_sys_time_us(void){    long long time_us = 0;    struct timeval sys_current_time;    gettimeofday(&sys_current_time, NULL);    time_us = (long long)sys_current_time.tv_sec*1000000 + sys_current_time.tv_usec;    return time_us;}int main(int arc, char *argv[]){    // 压缩    char *src0 = "12345678901234567890123456789012345678901234567890";    char dst0[64] = {0};    int src0_size = strlen(src0) + 1;    int max_dst0_size = sizeof(dst0);    int dst0_compress_size = 0;    printf("before compress = %s, bytes = %d\n", src0, src0_size);    if (src0_size < max_dst0_size)    {        long long compress_start_time = get_sys_time_us();        dst0_compress_size = LZ4_compress_default(src0, dst0, src0_size, max_dst0_size);        long long compress_end_time = get_sys_time_us();        printf("after compress = %s\n", dst0);        printf("compress_time = %lld us\n", compress_end_time - compress_start_time);    }    else    {        printf("compress error! src0_size >= max_dst0_size\n");    }        // 解压    char src1[64] = {0};    char dst1[64] = {0};    int compressed_size = dst0_compress_size;    int max_decompressed_size = sizeof(dst1);    int dst1_decompress_size = 0;        if (dst0_compress_size < max_decompressed_size)    {        memcpy(src1, dst0, dst0_compress_size);        printf("before decompress = %s\n", src1);    }    else    {        printf("dst0_compress_size >= max_decompressed_size\n");    }    if (compressed_size < max_decompressed_size)    {        long long decompress_start_time = get_sys_time_us();        dst1_decompress_size = LZ4_decompress_safe(src1, dst1, compressed_size, max_decompressed_size);        long long decompress_end_time = get_sys_time_us();        printf("after decompress = %s, bytes = %d\n", dst1, dst1_decompress_size);        printf("decompress_time = %lld us\n", decompress_end_time - decompress_start_time);    }    else    {        printf("decompress error! compressed_size >= max_decompressed_size\n");    }        return 0;}

编译运行:

gcc -o lz4_test lz4_test.c -Llz4_x86_lib/lib -Ilz4_x86_lib/include -llz4./lz4_test

更多实例可参照源码路径下的examples。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lz4压缩 的相关文章

  • 七大顶级编程学习网站

    1 B站 xff1a https www bilibili com 不要以为b站只有二次元和游戏 xff0c 很多高质量的 34 开源 34 教程应有尽有 xff0c 如果大家想学实践性较强的知识 xff0c 如java的juc xff0c
  • SpringBoot测试失败并报错: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration

    情况一 xff1a 该测试类在测试包test下的包名和类路径java下的包名不一致导致的 xff0c 修改包名一致即可 由于包名自动生成的缘故导致这两个包名不一致 xff0c 引发以下报错 java lang IllegalStateExc
  • bootstrap个人简历毕业作品模板

    简介 xff1a 一款bootstrap框架个人简历模板 xff0c 可以作为前端毕业作品模板 xff0c 模板非常简单 网盘下载地址 xff1a https zijieyunpan cn vOnXW43exgr 图片 xff1a
  • linux进阶20——GDB(六):查看变量命令(print和display)

    一段c语言程序 include lt stdio h gt int main int num result 61 0 i 61 0 scanf 34 d 34 amp num while i lt 61 num result 43 61 i
  • 开发常用的抓包工具

    前端开发常用的抓包工具 浏览器开发者工具 浏览器开发者工具就是开发中常用的F12 xff0c 或者点击右键 gt 检查 可以看到单个请求的时间 xff0c 并可过滤 筛选请求 vConsole vConsole是前端手机开发的调试利器 xf
  • Linux Debian9安装Go

    介绍 Go xff0c 也称为golang xff0c 是由Google开发的一种现代开源编程语言 Go在许多应用程序中越来越受欢迎 xff0c 它采用极简主义的开发方法 xff0c 帮助您构建可靠 xff0c 高效的软件 本教程将指导您下
  • linux C有限状态机解析HTTP请求

    先看main函数执行的功能很简单 xff0c 前半段是建立TCP连接的常规操作 xff0c 每次读取4096字节的数据到缓存区 xff0c 解析这4096个数据 xff0c 根据解析状态返回相应结果 int main int argc ch
  • 记录一次linux环境中java应用无法启动问题的排查过程

    linux环境中java应用无法启动问题的排查过程 问题表象 某天 xff0c 一个朋友找到我说自己有一个项目部署在云服务器上 xff0c 现在系统登录的时候提示用户名密码错误 xff0c 怀疑是密码被改了 xff0c 由于之前的开发离职了
  • 1366 Incorrect string value: ‘\xE6\x9F\xB3\xE5\xB2\xA9...‘ for column ‘name‘ at row 1数据插入失败

    1 创建数据库时指定utf8mb4编码 CREATE DATABASE 96 wordpress 96 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4 unicode ci span class
  • MapReduce编程中FileSystem接口——HDFS的基本使用

    基本的HDFS操作 xff0c 在linux总通过hadoop fs help可以获取所有的命令详细帮助文件 Java抽象类org apache hadoop fs FileSystem定义了hadoop的一个文件系统接口 Hadoop中关
  • Go语言中的单元测试策略

    以下为作者观点 xff1a 在Go语言中编写测试时 xff0c 可以采用不同的策略 作为Trendyol的索引团队 xff0c 我们在单元测试中经常使用FunctionPerTest 在某些时候 xff0c 我们意识到需要对某些类型的代码进
  • Docker下运行Selenium Grid

    Ubuntu下安装Docker 安装Docker命令 curl fsSL https get docker com bash s docker mirror Aliyun 也可以使用国内 daocloud 一键安装命令 xff1a curl
  • iOS 卡顿原因及优化思路

    很多iOS 开发 xff0c 都会面临到解决开发过程中的卡顿问题 卡顿就是在应用使用过程中出现界面不响应或者界面渲染粘滞的情况 xff0c 用户在操作App时 xff0c 会出现的页面掉帧现象 xff0c 给用户直接观感受就是页面卡卡的 x
  • 子网掩码和主机的关系,以及广播地址

    子网掩码和主机的关系 xff0c 以及广播地址 主机ip分为两部分组成 xff1a 网络位 43 主机位 举个例子 主机ip 192 168 1 3 子网掩码 255 255 255 0 子网掩码 255 255 255 0 二进制形式为1

随机推荐