无状态压缩和有状态压缩的区别是什么?

4
在关于远程调用框架的一篇文章中,第50%处有一个名为“Filters”的章节,提到了两种压缩方式:
  • ZLib无状态压缩
  • ZLib有状态压缩
这两者有何区别?它们是与ZLib相关还是常见的压缩方法?
在搜索时,我只能找到有状态和无状态的Web服务。这些属性难道不是用来描述压缩方法的吗?

感谢这些答案,如果可以的话,我会标记更多的答案为已接受... - MOnsDaR
3个回答

4

来自传输层安全协议压缩方法

TLS使用的压缩方法可以是有状态的(压缩器通过所有压缩记录维护其状态)或无状态的(压缩器独立地压缩每个记录),但在TLS中使用无状态压缩方法似乎没有什么已知的好处。

一些压缩方法在压缩和解压缩数据包有效载荷时具有维护历史信息的能力。压缩历史记录允许在流上实现更高的压缩比,而不是按数据包进行压缩,但是跨数据包维护历史记录意味着数据包可能包含用于完全解压缩不同数据包中包含的数据的数据。因此,历史记录维护需要可靠的链接和有序的数据包传递。由于TLS和较低层协议提供可靠的、有序的数据包传递,如果压缩方法支持,则可以维护和利用压缩历史信息。


因此,如果使用的方法支持历史记录,有状态压缩会导致更高的压缩比率吗? - MOnsDaR
我认为是这样,但可能并不像链接文档中所述的那么大的增长... - Jakub Konecki

3

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

在压缩方面,无状态意味着它看到的任何数据块都会进行压缩,而不依赖于先前的输入。这样虽然更快,但通常压缩效果较差;有状态的压缩则查看以前的数据来决定如何压缩当前数据,虽然更慢但压缩效果更好。


3
Zlib是一种自适应的压缩算法。所有压缩算法之所以有效,是因为它们处理的数据并不完全随机。相反,输入数据具有非均匀分布,这可以被利用。以英文文本为简单例子,字母“e”的出现频率比字母“q”高得多。Zlib会检测到这一点,并对字母“e”使用更少的位。
现在,当您发送很多短信,并且知道它们都是英文时,应使用Zlib有状态压缩。它将在所有消息中保持字母“e”的低位表示。但是,如果混合了中文、日文、法文等消息,则有状态压缩就不再那么智能。日文文本中很少出现字母“e”。无状态压缩将为每个消息检查哪些字母是常见的。ZLib无状态压缩的著名示例是PNG文件格式,在2个不同的图像之间不保留任何状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接