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

时间:2010-10-22 05:48:30

标签: c++ web-services compression zlib rcf

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

  • ZLib无状态压缩
  • ZLib有状态压缩

那些有什么区别?是ZLib相关还是这些常见的压缩方法?

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

3 个答案:

答案 0 :(得分:3)

来自Transport Layer Security Protocol Compression Methods

  

与TLS一起使用的压缩方法可以   要么是有状态的(压缩机   通过所有人保持它的状态   压缩记录)或无状态   (压缩机压缩每条记录   独立),但似乎   使用一个鲜为人知的好处   无状态压缩方法   TLS。

     

有些压缩方法有   保持历史的能力
  压缩时的信息和   解压缩数据包有效负载。该
  压缩历史允许更高   压缩比要达到   与每个数据包相比的流   压缩,但保持一个   跨数据包的历史意味着a   数据包可能包含所需的数据   完全解压缩包含的数据   在另一个包中。历史   维护因此需要a   可靠的链接和顺序包   交货。由于TLS和下层   协议提供可靠,   顺序分组传送,压缩   历史信息可能是   如果支持则维护和利用   通过压缩方法。

答案 1 :(得分:3)

通常,无状态描述任何没有过去事件记忆的进程,有状态描述任何具有这种记忆的进程(并使用它来做出决策。)

在压缩中,无状态意味着它看到的任何数据块,它会压缩,而不依赖于先前的输入。它更快但通常压缩更少;有状态压缩查看以前的数据以决定如何压缩当前数据,它更慢但压缩得更好。

答案 2 :(得分:3)

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

现在,当您发送大量短文本消息时,您知道它们都是英文的,您应该使用Zlib状态压缩。它会在所有消息中保留字母e的低位表示。但如果有中文,日文,法文等信息混杂在一起,那么有状态压缩就不再那么聪明了。日文文本中的字母e很少。无状态压缩将检查每个消息哪些字母是常见的。一个众所周知的ZLib无状态压缩示例是PNG文件格式,它在两个不同的图像之间不保持状态。