我正在尝试将多个文件压缩到一个 zip 存档中,并且遇到内存不足的警告。由于完整的 zip 文件已加载到内存中,我猜这就是问题所在。有没有一种方法可以让我使用 ZipArchive 更好地管理压缩/解压缩,以便并非所有数据都立即存储在内存中?
谢谢!
我正在尝试将多个文件压缩到一个 zip 存档中,并且遇到内存不足的警告。由于完整的 zip 文件已加载到内存中,我猜这就是问题所在。有没有一种方法可以让我使用 ZipArchive 更好地管理压缩/解压缩,以便并非所有数据都立即存储在内存中?
谢谢!
在对 ZipArchive 的替代品进行了一些调查之后,我发现了另一个名为 Objective-zip 的项目,它似乎比 ZipArchive 好一点。链接在这里:
http://code.google.com/p/objective-zip/
API 非常简单。我遇到的一件事是,在乞求时,我正在读取数据并且从不发布它,所以如果您将一堆大文件添加到 zip 文件中,请记住发布数据。这是我使用的一个小代码:
ZipFile *zipFile = [[ZipFile alloc] initWithFileName:archivePath mode:ZipFileModeCreate]; for(NSString *子路径中的路径){ NSData *data= [[NSData alloc] initWithContentsOfFile:longPath]; ZipWriteStream *stream = [zipFile writeFileInZipWithName:path compressionLevel:ZipCompressionLevelNone]; [流写入数据:数据]; [流完成写作]; 【数据发布】; } [zip文件关闭]; [zip文件发布];
我希望这对遇到同样问题的人有所帮助。
解决这个问题的一个更简单的方法是简单地更改 ZipArchive 将文件读入 NSData 的方法。只需更改以下代码
data = [ NSData dataWithContentsOfFile:file ];
至
data = [ NSData dataWithContentsOfMappedFile:file ];
这将导致操作系统以内存映射方式读取文件。基本上,它只是根据需要从文件中读取时使用更少的内存,而不是一次将其全部加载到内存中。