如何将内存中的数组压缩为*.zip归档文件

How to compress an in memory array to a *.zip archive?

本文关键字:压缩 zip 归档文件 数组 内存      更新时间:2023-10-16

我有许多像下面这样的多维数组。它们当然是用特定的值填充的。

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

如何在内存中压缩这样的数组,然后将它们作为*.zip归档存储到硬盘上?

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

你应该告诉我们更多关于你的问题,以便得到一个具体的答案。您需要将这些文件移到另一台机器上吗?数组的维数总是相同的吗?

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

对于更有可能的情况下,你有不同类型的数组,并希望他们是可读的其他设备(和其他软件),我建议你使用类似http://www.hdfgroup.org/HDF5/的东西,这将允许你以结构化的方式存储数据,包括数据类型(与endianness等)。

看一下libchive (BSD许可证)。它非常强大,您可以严格控制您的数据:您可以将不同的内存块组合为压缩文件(例如.tar.gz)中的"文件"。里面有一些很好的教程