C++ 无状态压缩和有状态压缩之间的区别?

C++ 无状态压缩和有状态压缩之间的区别?,c++,web-services,compression,zlib,rcf,C++,Web Services,Compression,Zlib,Rcf,在关于远程调用框架的章节中,过滤器(向下滚动~50%)提到了两种压缩方式: ZLib无状态压缩 ZLib状态压缩 它们之间有什么区别?是与ZLib相关还是这些常见的压缩方法 在搜索时,我只能找到有状态和无状态的Web服务。属性无状态/ful不是用来描述压缩方法的吗?来自: 与TLS can一起使用的压缩方法 处于(压缩机)状态 始终保持其状态 压缩记录)或无状态 (压缩机压缩每个记录 独立),但似乎没有 很少有人知道使用 内部的无状态压缩方法 TLS 一些压缩方法具有 维护历史记录的能力 压

在关于远程调用框架的章节中,过滤器(向下滚动~50%)提到了两种压缩方式:

  • ZLib无状态压缩
  • ZLib状态压缩
它们之间有什么区别?是与ZLib相关还是这些常见的压缩方法

在搜索时,我只能找到有状态和无状态的Web服务。属性无状态/ful不是用来描述压缩方法的吗?

来自:

与TLS can一起使用的压缩方法 处于(压缩机)状态 始终保持其状态 压缩记录)或无状态 (压缩机压缩每个记录 独立),但似乎没有 很少有人知道使用 内部的无状态压缩方法 TLS

一些压缩方法具有 维护历史记录的能力
压缩和删除时的信息 解压缩数据包有效负载。
压缩历史允许更高的 要达到的压缩比 与每个数据包相比较的流 压缩,但保持一个
跨数据包的历史意味着 数据包可能包含需要删除的数据 完全解压缩包含的数据 在另一个包里。历史 因此,维护既需要 可靠链路和顺序数据包 传送由于TLS和较低层 协议提供了可靠的, 顺序数据包传递、压缩 历史信息可能是 维护和利用(如果支持) 通过压缩方法


一般来说,无状态描述的是没有过去事件内存的任何进程,有状态描述的是没有过去事件内存的任何进程(并使用它来做出决策)


在压缩中,无状态意味着无论它看到什么样的数据块,它都会压缩,而不依赖于以前的输入。它更快,但通常压缩更少;有状态压缩查看以前的数据以决定如何压缩当前数据,速度较慢,但压缩效果更好。

Zlib是一种自适应的压缩算法。所有的压缩算法都能工作,因为它们处理的数据并不完全是随机的。相反,他们的输入数据具有可利用的非均匀分布。以英语文本为例。字母
e
比字母
q
更常见。Zlib将检测到这一点,并对字母
e
使用较少的位


现在,当你发送很多短消息时,你知道它们都是英文的,你应该使用Zlib statefull压缩。它将在所有消息中保持字母
e
的低位表示。但是,如果有中文、日文、法文等混合的消息,有状态压缩就不再那么聪明了。日文文本中只有几个字母
e
。无状态压缩将检查每条消息中哪些字母是公共的。ZLib无状态压缩的一个众所周知的例子是PNG文件格式,它在两个不同的图像之间保持无状态。

所以当使用的方法支持历史时,有状态压缩会导致更高的压缩比?我想是的,但是,正如链接文档中所述,增加的幅度可能没有那么大……感谢这些答案,如果我可以,我会把更多的答案标记为已接受。。。