从原始数据中的偏移量即时解压缩数据?

时间:2016-06-22 00:45:42

标签: compression

我有一个我想要压缩的数据块,比如可变大小的C结构。我想压缩数据,但是在应用程序代码中动态访问结构的特定字段,而不必解压缩整个数据。

是否有算法可以获取偏移量(对于原始数据),解压缩并返回数据?

2 个答案:

答案 0 :(得分:1)

压缩方法通常通过使用前面的数据来实现压缩。在压缩数据的任何一点,您需要至少知道一些前面的未压缩数据,以便解压缩后面的内容。

您可以故意忘记压缩数据中选定点的历史记录,以便在这些点上随机访问。这会将压缩减少一些量,但是对于足够远的随机访问点来说这可能很小。一种简单的方法是使用gzip压缩片段并连接gzip流,记录每个流的偏移量。为了减少开销,您可以在zlib中使用Z_FULL_FLUSH来执行相同的操作。

或者,您可以将每个随机访问点的历史记录保存在单独的文件中。可以在zran.c中找到为zlib或gzip流构建此类随机访问索引的示例。

您可以构建不依赖于先前解压缩历史的压缩方法,例如简单的霍夫曼编码。然而,与依赖于先前历史的方法相比,压缩比将会很差。

答案 1 :(得分:0)

示例压缩文件系统:我们有一个文件系统API,它不需要知道在写入磁盘之前发生的压缩。那里有一些算法。 查看here了解详情。

但是,尝试优化使用的数据结构可能会有更多的好处,因此不需要压缩它们? 为了有效访问,需要索引。因此,在数组和MultiMaps以及稀疏数组之间应该有一种方法来建模数据,因为数据被有效地表示,所以不需要进一步压缩。 当然,这在很大程度上取决于用例非常模糊。

可以想象使用压缩层来访问数据的用例,但可能有更好的方法来解决问题。