字节数组压缩

3
我的问题是: 我想将一个字节数组存储在压缩文件中,并且我想要以良好的性能读取它。
所以我创建了一个字节数组,然后传递给ZLIB算法,然后将其存储在文件中。 令我惊讶的是,该算法表现不佳,可能是因为该数组是随机样本。 使用这种方法,读取将会非常容易。只需将流复制到内存中,解压缩并将其复制到字节数组中。
但是我需要压缩文件。我是否必须使用像RLE这样的算法来压缩字节数组? 我认为可以将字节数组存储为字符串,然后压缩它。但是我认为在读取数据时性能会很差。
抱歉我的英语不好。
谢谢

我的文件就像一个二进制文件。我认为正因为如此,我的压缩效果非常差。我是对的吗? - p.magalhaes
我创建了一个整数数组文件,而不是字节数组文件,并对其进行了压缩。令我惊讶的是,整数数组文件被压缩得非常好!有人知道为什么吗?谢谢。 - p.magalhaes
所以,我进行了更详细的调查。使用函数random(255)创建文件。因此,当我进行压缩时,文件大小会增加。 - p.magalhaes
3个回答

1

不清楚你是否在统计学意义上使用“随机样本”(随机选择的实际数据样本),还是只是随机生成的数据。前者可以很好地压缩。

然而,真正的随机数据无法很好地压缩。事实上,可压缩性是随机性的衡量标准之一。


我进行了一个测试。我创建了一个存储随机字节的字节数组文件。然后我尝试压缩它,但是没有成功。压缩效果非常差。这就像一个二进制文件,所以压缩效果很差? - p.magalhaes
1
@Pedro,所有压缩算法都是通过利用输入数据中的非随机性来工作的。因此,随机数据的压缩效果较差。 - Matthew Flaschen
所以我需要一个算法来压缩我的字节数组。这对我来说似乎很简单。我想将我的字节数组传递给一个算法,然后接收一个新的紧凑数组或流。 - p.magalhaes

1
如果数据是随机的,它将具有高。没有算法可以成功地压缩这样的数据。也就是说,由于它是随机的,你可能会在某些特定情况下得到幸运,但通常试图压缩它是无用的。

0

你确定你真的需要压缩随机数据吗?如果你知道数据源和其他一些可以用来选择和优化压缩算法的规格,那么最好的压缩效果可以实现。首先,你的数组有多大?如果这些是字符值,每个字母的频率是不同的。如果这个数组是排序的或者它具有唯一的值,这也可以用来优化空间。那么你的数据源是什么?


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