什么是单个网络数据包最简单的压缩技术?

时间:2014-03-16 04:12:58

标签: networking compression

需要针对单个网络数据包的简单压缩方法。 从某种意义上讲,这是一种使用最少计算的技术。

谢谢!

2 个答案:

答案 0 :(得分:0)

有两种基本类型的压缩:无损和有损。无损意味着如果你有两个算法c(msg)是压缩算法而d(msg)是解压缩算法那么

msg == d(c(msg))

当然,这意味着有损压缩将是:

msg!= d(c(msg))

有了一些信息,有损是可以的。这通常是声音的处理方式。您可能会丢失一些没有任何明显损失的位。例如,MP3压缩以这种方式工作。有损算法通常特定于您正在压缩的信息类型。

因此,它实际上取决于您传输的数据。我假设您严格讲述有效负载而不是任何寻址字段,并且您对无损压缩感兴趣。最简单的是行程编码(RLE)。在RLE中,您基本上可以找到重复的连续值,并使用标志后跟计数后跟要重复的值来替换值。只有当运行的长度大于(或等于)元组的长度时,才应该这样做

(的sizeof(标志)+的sizeof(计数)+的sizeof(值)。

如果数据小于8位,这可以很好地工作,在这种情况下,您可以使用第8位作为标志。例如,如果你有三个A" AAA"然后以十六进制表示414141。您可以将其编码为C103。在这种情况下,如果相同值的字符数超过255个,则必须再次启动压缩序列之前,最大运行次数为255(FF)。所以在这种情况下,3个字节变为2个字节。在最好的情况下,255个相同值的7位值将是2个字符而不是255个。

可以使用简单的状态机来处理RLE。

请参阅http://en.wikipedia.org/wiki/Run-length_encoding

答案 1 :(得分:0)

lz4压缩和解压缩速度非常快。 zlib可以更好地压缩,但速度不是很快。 “最少计算”将完全不压缩。