【问题标题】:Difference between stateless and stateful compression?无状态和有状态压缩的区别?
【发布时间】:2010-10-22 05:48:30
【问题描述】:

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

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

它们之间有什么区别?是ZLib相关还是这些常见的压缩方式?

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

【问题讨论】:

  • 感谢您提供这些答案,如果可以的话,会将更多答案标记为已接受...

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


【解决方案1】:

来自Transport Layer Security Protocol Compression Methods

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

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

【讨论】:

  • 那么当使用的方法支持历史时,状态压缩会导致更高的压缩率?
  • 我会这么认为,但可能如链接文档中所述,增长幅度并不大......
【解决方案2】:

一般来说,无状态描述的是任何没有过去事件记忆的进程,而有状态描述的是任何有这种记忆(并使用它来做出决定)的进程。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】: