【数据存储】数据压缩算法DEFLATE

1.数据压缩算法DEFLATE

当前数据压缩领域流行的无损压缩算法有很多,如DEFLATE、BZIP2、LZMA、LZMA2等等,其中压缩速度最快的是DEFLATE压缩算法。根据对DEFLATE算法性能的实际测试,发现DEFLATE算法在大数据文件压缩方面的性能表现,并不如预期那样令人满意。

Deflate是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法1。

Deflate压缩与解压代码可以在自由、通用的压缩库zlib上找到。常见的压缩算法如下:

  • zlib(RFC1950):一种格式,是对deflate进行了简单的封装,zlib=zlib头+deflate编码的实际内容+zlib尾。
  • gzip(RFC1952):一种格式,也是对deflate进行的封装,gzip=gzip头+deflate编码的实际内容+gzip尾。

LZ77算法是采用字典做数据压缩的算法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年发表的论文《A Universal Algorithm for Sequential Data Compression》中提出。基于统计的数据压缩编码,比如Huffman编码,需要得到先验知识,即信源的字符频率,然后进行压缩。但是在大多数情况下,这种先验知识是很难预先获得。因此,设计一种更为通用的数据压缩编码显得尤为重要。LZ77数据压缩算法应运而生,其核心思想是利用数据的重复结构信息来进行数据压缩。

two types of compression methodologies:

  • Stateless - data associated with a compression operation is compressed without any reference to another compression operation.
  • Stateful - data in each compression operation is compressed with reference to previous compression operations in the same data stream i.e. history of data is maintained between the operations.

stateful inflate

  • Inflate: 这是一个算法,通常用于数据压缩和解压缩。它是DEFLATE算法的一部分,DEFLATE是一个广泛使用的无损数据压缩算法。
  • Stateful (有状态的): 在计算中,一个算法或过程如果依赖于其之前的状态或历史,我们说它是“有状态的”。与“无状态的”算法或过程相反,后者不依赖于任何之前的状态。

在解压缩过程中使用某种状态的系统或算法。这通常涉及到以下内容:

上下文敏感: 有状态的解压缩算法可能需要对之前的上下文进行敏感分析,以便更好地理解并解压缩数据。

历史记录: 这些算法可能会跟踪之前处理过的数据或模式,以优化解压缩过程。

动态调整: 算法可能会根据它之前遇到的数据动态地改变其行为或参数。

stateless inflate

Here is a simplified explanation of how stateless inflate works:

  1. Block Independence: In a stateless inflate process, compressed data is divided into blocks, and each block is compressed independently. This means that the decompression of one block doesn’t rely on the decompression state of previous blocks.
  2. Decompression Algorithm: The stateless inflate algorithm reads a compressed block of data and uses the information within that block to decompress it. This typically involves reconstructing the original data from the compressed form using the Huffman codes and LZ77 compression techniques.
  3. No Persistent State: After decompressing a block, there is no need to maintain persistent state information for the next block. Each block is treated as an independent unit, making it easier to parallelize or distribute the decompression process.
  4. Efficiency: Stateless inflate can be more efficient in certain scenarios, especially when dealing with streaming data or in parallel processing environments. It allows for a simpler and faster implementation because there is no need to manage state information across blocks.

Stateless inflate is commonly used in scenarios where data can be processed in a streaming fashion, and each compressed block is relatively small and independent. This approach is well-suited for certain applications, such as network protocols, file compression formats, and other situations where data arrives in chunks that can be processed independently.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL 系列教程(三)

目录 SQL INNER JOIN 关键词 SQL INNER JOIN 关键词 演示数据库 内连接(INNER JOIN)实例 连接三个表 SQL LEFT JOIN 关键词 SQL LEFT JOIN 关键词 演示数据库 SQL LEFT JOIN 实例 SQL RIGHT JOIN 关键词 SQL RIGHT JOIN 关键词 演示数据库 …

字符串相关函数【超详细】(strcpy,strstr等string.h中的函数)

文章目录 strlen库中函数定义函数作用函数大概“工作”流程函数使用注意(要求)函数使用例举 strcpy库中函数定义函数作用函数使用注意(要求)函数大概“工作”流程函数使用例举 strcat库中函数定义函数作用函数使用注意&#xff08…

SpringMVC使用步驟

1.导入依赖坐标 <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><!--这个依赖会跟tomcat插件有冲突&#xff0c;需要把有效范围设置为provided--><scop…

Spring Boot 中的自动配置(autoconfigure)

文中部分图片来源为 动力节点-王鹤老师的Spring Boot3.0 视频讲解中。 Spring Boot 中的自动配置&#xff08;autoconfigure&#xff09; 一、自动配置的原理二、关键注解和类1.EnableAutoConfiguration 注解2.Import 注解3.AutoConfigurationImportSelector 类4.AutoConfigura…

关于c++里string的底层存储布局

之前一直好奇&#xff0c;在c 字符串的长度是记录在什么地方的&#xff0c;今天写了个代码验证一下。 看&#xff0c;代码如下&#xff1a; // // Created by dlf on 2024/1/22. // // // Created by on 2024/1/11. // #include <iostream> #include <string>int…

外包干了2个多月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

微信小程序(十)表单组件(入门)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.type 属性指定表单类型 2.placeholder 属性指定输入框为空时的占位文字 源码&#xff1a; form.wxml <!-- 提前准备好的布局结构代码 --> <view class"register"><view class"…

ASP.NET Core NE8实现HTTP Upgrade和HTTP CONNECT代理服务器

看到一个文章[Go] 不到 100 行代码实现一个支持 CONNECT 动词的 HTTP 服务器 在NET8中如何实现 创建项目为MiniApi 编辑Program.cs文件。 var builder WebApplication.CreateSlimBuilder(args);var app builder.Build();// 将HTTP请求通过协议升级机制转为远程TCP请求&…

微信小程序如何自定义单选和多选

实现单选 实现效果&#xff1a;点击显示单选状态&#xff0c;每次仅能点击一个元素。 实现方式&#xff1a; wxml&#xff1a; <view wx:for"{{item_list}}" data-info"{{index}}" class"{{menu_indexindex?choose:no_choose}}" bind:ta…

实现低失调、低噪声的四路运算放大器MC33079DR2G与解决方案

MC33079DR2G是一款电源管理芯片&#xff0c;是优质单片运算放大器&#xff0c;采用具有创新高性能概念的双极技术&#xff0c;适用于优质音频和数据信号处理应用。结合了高频率 PNP 输入晶体管的使用&#xff0c;可产生具有低输入电压噪声和高增益带宽产品和摆率的放大器。所有…

MySQL的奇妙冒险:与数据跳华尔兹

引言&#xff1a;跳进MySQL的舞池 欢迎来到MySQL的世界&#xff0c;这里充满了表格、查询和一些奇妙的数据舞步。作为世界上最受欢迎的开源关系型数据库之一&#xff0c;MySQL就像是一个永远不睡觉的数据守护者。现在&#xff0c;让我们一起踏上这段轻松却充满学问的旅程&…

每日Linux(一)——man和help命令

man和help 引子man&#xff08;manual&#xff09;helphelp和man的区别内建命令 vs 外部命令内建命令 (Built-in Commands):外部命令 (External Commands):如何判断是内建命令和外部命令 再学习 引子 为什么要从man和help开始学习&#xff1f;因为这两个命令可以大大提升学者的…

羊奶与牛奶,谁更好?

羊奶与牛奶&#xff0c;谁更好&#xff1f; 羊奶和牛奶是我们日常饮食中常见的乳制品&#xff0c;但究竟哪种更好呢&#xff1f;今天就让小编羊大师带大家一起来探讨一下&#xff0c;看看羊奶和牛奶在各方面的优势和劣势&#xff0c;帮助你作出更明智的选择。 让我们从营养价…

生成三维模型时,OSGB、PLY、OBJ、S3MB这几种格式分别有什么不同?

OSGB是一种二进制存储&#xff0c;带有嵌入式链接纹理数据的倾斜摄影三维数据格式。此类数据文件碎&#xff0c;数量多&#xff0c;高级别金字塔文件大&#xff0c;难以实现不同地域、不同部门之间的数据共享&#xff1b; OBJ是一种标准三维模型文件格式&#xff0c;一般包括三…

前端开发_JavaScript之WebAPI

WebAPI作用和分类 作用: 就是使用 JS 去操作 html 和浏览器 分类&#xff1a;DOM (文档对象模型)、BOM&#xff08;浏览器对象模型&#xff09; DOM DOM&#xff08;Document Object Model——文档对象模型&#xff09;是用来呈现以及与任意 HTML 或 XML文档交互的API DOM…

【8.ADC模数转换器】蓝桥杯嵌入式一周拿奖速成系列

系列文章目录 蓝桥杯嵌入式系列文章目录(更多此系列文章可见) ADC模数转换器 系列文章目录一、STM32CUBEMX配置二、项目代码1.main.c --> ADCProcess 总结 一、STM32CUBEMX配置 STM32CUBEMX PB15 -> ADC2_IN15 ; PB12-> ADC1_IN11ADCProcess 二、项目代码 1.main.c …

Kotlin 协程库v1.7.1的核心模块(kotlinx-coroutines-core)-- kotlinx.coroutines.flow篇

Flow 是一种异步数据流的表示&#xff0c;可以用于处理异步数据流的操作。 AbstractFlow&#xff08;ExperimentalCoroutinesApi&#xff09; 协程库中的一个抽象类&#xff0c;用于创建具有状态的 Flow 实现。它跟踪了用于上下文保留的所有属性&#xff0c;并在任何属性被违…

C语言通过IXMLHTTPRequest以get或post方式发送http请求获取服务器文本或xml数据

做过网页设计的人应该都知道ajax。 Ajax即Asynchronous Javascript And XML&#xff08;异步的JavaScript和XML&#xff09;。使用Ajax的最大优点&#xff0c;就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作&#xff0c;并避免了在网络上发…

手撕重采样,考虑C的实现方式

一、参考文章&#xff1a; 重采样、上采样、下采样 - 知乎 (zhihu.com) 先直接给结论&#xff0c;正常重采样过程如下&#xff1a; 1、对于原采样率fs&#xff0c;需要重采样到fs1&#xff0c;一般fs和fs1都是整数哈&#xff0c;则先找fs和fs1的最小公倍数&#xff0c;设为m…

libjsoncpp 的编译和交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…