如何将内存数组压缩为* .zip存档?

时间:2013-06-13 10:46:18

标签: c++ arrays compression zip in-memory

我有许多多维数组,如下所示。当然,它们充满了特定的价值。

uint8_t data[32][64][32];

如何在内存中压缩此类数组,然后将它们作为*.zip存档存储到硬盘?

3 个答案:

答案 0 :(得分:4)

libzip是一个ZIP压缩和解压缩库,允许用户对内存缓冲区和文件进行操作。

答案 1 :(得分:1)

您应该告诉我们更多关于您的问题以便获得具体答案。您需要将这些文件移动到其他计算机吗?阵列的尺寸是否始终相同?

在最简单的情况下,您只想存储数据 - 始终使用相同的格式 - 并且只在具有相同代码的计算机上使用它,您只需要一个压缩库。我之前使用过http://www.quicklz.com/,它很容易集成。在这种情况下,它是一个多维数组的事实并不重要,数据的类型也没关系。只需将指针指向第一个元素和指向压缩器的长度,并将结果保存到文件中(如果您愿意,可以将其命名为.zip)。然后,当您想要重新加载它时,请读取文件,将其交给解压缩器并将结果转换为具有相同尺寸的数组。

对于更可能出现不同类型数组的情况,并希望它们在其他设备(以及其他软件)上可读,我建议您使用http://www.hdfgroup.org/HDF5/之类的内容来存储数据以结构化的方式包括数据类型(带有字节序等)。

答案 2 :(得分:1)

查看libarchive(BSD许可证)。它非常强大,您可以严格控制数据:您可以将不同的内存块组合为压缩文件中的“文件”(例如.tar.gz)。里面有几个nice tutorials