C++ 无状态压缩和有状态压缩之间的区别?
在关于远程调用框架的章节中,过滤器(向下滚动~50%)提到了两种压缩方式:C++ 无状态压缩和有状态压缩之间的区别?,c++,web-services,compression,zlib,rcf,C++,Web Services,Compression,Zlib,Rcf,在关于远程调用框架的章节中,过滤器(向下滚动~50%)提到了两种压缩方式: ZLib无状态压缩 ZLib状态压缩 它们之间有什么区别?是与ZLib相关还是这些常见的压缩方法 在搜索时,我只能找到有状态和无状态的Web服务。属性无状态/ful不是用来描述压缩方法的吗?来自: 与TLS can一起使用的压缩方法 处于(压缩机)状态 始终保持其状态 压缩记录)或无状态 (压缩机压缩每个记录 独立),但似乎没有 很少有人知道使用 内部的无状态压缩方法 TLS 一些压缩方法具有 维护历史记录的能力 压
- ZLib无状态压缩
- ZLib状态压缩
压缩和删除时的信息 解压缩数据包有效负载。
压缩历史允许更高的 要达到的压缩比 与每个数据包相比较的流 压缩,但保持一个
跨数据包的历史意味着 数据包可能包含需要删除的数据 完全解压缩包含的数据 在另一个包里。历史 因此,维护既需要 可靠链路和顺序数据包 传送由于TLS和较低层 协议提供了可靠的, 顺序数据包传递、压缩 历史信息可能是 维护和利用(如果支持) 通过压缩方法
一般来说,无状态描述的是没有过去事件内存的任何进程,有状态描述的是没有过去事件内存的任何进程(并使用它来做出决策)
在压缩中,无状态意味着无论它看到什么样的数据块,它都会压缩,而不依赖于以前的输入。它更快,但通常压缩更少;有状态压缩查看以前的数据以决定如何压缩当前数据,速度较慢,但压缩效果更好。Zlib是一种自适应的压缩算法。所有的压缩算法都能工作,因为它们处理的数据并不完全是随机的。相反,他们的输入数据具有可利用的非均匀分布。以英语文本为例。字母
e
比字母q
更常见。Zlib将检测到这一点,并对字母e
使用较少的位
现在,当你发送很多短消息时,你知道它们都是英文的,你应该使用Zlib statefull压缩。它将在所有消息中保持字母
e
的低位表示。但是,如果有中文、日文、法文等混合的消息,有状态压缩就不再那么聪明了。日文文本中只有几个字母e
。无状态压缩将检查每条消息中哪些字母是公共的。ZLib无状态压缩的一个众所周知的例子是PNG文件格式,它在两个不同的图像之间保持无状态。所以当使用的方法支持历史时,有状态压缩会导致更高的压缩比?我想是的,但是,正如链接文档中所述,增加的幅度可能没有那么大……感谢这些答案,如果我可以,我会把更多的答案标记为已接受。。。