【问题标题】:How to compress an in memory array to a *.zip archive?如何将内存数组压缩为 *.zip 存档?
【发布时间】:2013-06-13 10:46:17
【问题描述】:

我有很多像下面这样的多维数组。当然,它们充满了特定的值。

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

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

【问题讨论】:

  • 使用 ZIP 压缩库和fwrite()
  • 您建议使用什么压缩库以及如何直接压缩内存数组?从现在开始我只听说过压缩文件。但我不想在压缩之前将所有内容都存储在一个大文件中。
  • 谢谢,我会使用那个库。我正在寻找的函数称为zip_source_buffer(),它允许直接用内存中的变量填充存档。随意写一个简短的答案,然后我会将其标记为已接受。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您应该更多地告诉我们您的问题,以便获得具体的答案。您是否需要将这些文件移动到另一台机器上?数组的维度总是一样的吗?

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

    如果您有不同类型的数组,并且希望它们在其他设备(和其他软件)上可读,我建议您使用类似http://www.hdfgroup.org/HDF5/ 这样的东西,这样您就可以将数据存储在一个结构化方式,包括数据类型(字节序等)。

    【讨论】:

    • 这是关于拯救世界的类似 Minecraft 的游戏。数组维度始终相同,但我将存储不同数量的这些数组。生成的文件可以移动到其他计算机上,并且应该可以被那里的同一个应用程序读取。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多