Java 120位数据转换为32位

时间:2011-11-06 13:33:03

标签: java compression

有没有办法将我的120位数据转换成32位,并在从这32位中取回我的120位数据后?

3 个答案:

答案 0 :(得分:2)

它叫做无损压缩,你一定要读一下tutorial

话虽如此,您可以对任何数据进行的压缩高度依赖于数据中的信息冗余。所以你可以把它降到32位,但是没有保证。

答案 1 :(得分:1)

有一个数学证据表明这种变换不可能“永远”,它被称为鸽子洞原则。

http://en.wikipedia.org/wiki/Pigeonhole_principle

基本上,如果你可以将任何 120位的序列压缩成32位,你可以递归地将整个网络压缩成32位。

现在,这并不意味着永远不可能:您可以将一些120位序列压缩成32位,前提是您事先知道要压缩的序列的某些属性。

例如,IP可以是列表的一部分,而不是“任何”可能的值。列表中的索引将花费少于32位。对于端口号,它可能不是完全随机的,您可以将选择减少为预定义数字列表。如果只有4个端口可用,则只需要2位(而不是16位)。

对于时间戳,这要困难得多。这取决于测量的精度。 一种可能性是使用“delta”值(作为+ N加到已知的“base”)。 可用于时间戳的位数取决于先前字段已使用的位数。

因此可能可以将其压缩为32位,但不能保证。这在很大程度上取决于您必须考虑的各种情况。

答案 2 :(得分:0)

无法将每个 120位数据压缩为32位数据并将其解压缩回原始数据。但是,您只能无损压缩部分