gpt4 book ai didi

objective-c - 是否可以内存映射压缩文件?

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:55 24 4
gpt4 key购买 nike

我们有包含 zlib 压缩二进制数据的大文件,我们希望对其进行内存映射。

是否有可能内存映射这样一个压缩的二进制文件并以有效的方式访问这些字节?

我们是否最好只解压缩数据,内存映射它,然后在我们完成我们的操作后再次压缩它?

编辑

我想我应该提一下,可以定期附加这些文件。

目前,磁盘上的数据通过 NSMutableData 加载并解压缩。然后我们对该数据进行一些任意的读/写操作。最后,在某个时候我们压缩数据并将其写回磁盘。

最佳答案

内存映射就是内存到磁盘的 1:1 映射。这与自动解压缩不兼容,因为它破坏了 1:1 映射。

我假设这些文件是只读的,因为随机访问写入压缩文件通常是不切实际的。因此,我假设这些文件有些静态。

我相信这是一个可以解决的问题,但它不是微不足道的,您需要了解压缩格式。我不知道有任何易于重用的软件可以解决它(尽管我敢肯定过去很多人都解决过类似的问题)。

您可以对文件进行内存映射,然后提供一个前端适配器接口(interface)来获取给定偏移量和长度的字节。您将扫描一次文件,边走边解压缩,然后创建一个“目录”文件,将周期性标称偏移量映射到实际偏移量(这只是一种优化,您可以在获取数据时“发现”该目录) .然后算法看起来像:

  • 给定标称偏移量 n,查找映射到小于 n 的最大实际偏移量 m
  • m-32k 读入缓冲区(32k 是 DEFLATE 中允许的最大距离)。
  • m 开始 DEFLATE 算法。计算解压缩的字节数,直到达到 n

显然您希望缓存您的解决方案。 NSCacheNSPurgeableData 是理想的选择。真正做到这一点并保持良好的性能将是一项挑战,但如果它是您应用程序的关键部分,它可能会非常有值(value)。

关于objective-c - 是否可以内存映射压缩文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7529651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com