1

某段代码的工作方式如下:

  1. 从磁盘读取文件并将其作为 NSData 存储在内存中
  2. 加密(解密)它,从而在内存中产生一个相同大小的附加 NSData 对象
  3. 将加密(解密)的数据写入磁盘

现在,对于大小为 10 或 100 mb 的文件,这工作得很好,并保持每秒处理字节的一致速率(因此处理 100 mb 文件将需要 10 倍于 10 mb 的文件)。如果我说 1.5 gigs,那么系统必须将其中的 2 个保留在内存中,以便它开始交换到磁盘,这会大大降低速度。

所以我想也许以下是可能的:

  1. 查看文件并将其拆分为 100mb 块(例如)
  2. 读取一个块
  3. 加密(解密)它
  4. 将加密的块附加到输出文件
  5. 把原始块扔掉,这样整个过程最多占用 200mb 的 RAM

我的问题是:

  1. 那可能吗?
  2. 如果是这样,这是最好的方法吗?
  3. 如果是这样,我将如何实施它?
4

1 回答 1

1

你想做的事是完全可能的。你的问题需要一个有点冗长的答案,所以我推荐你到这个网页:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html

请注意,页面中的示例处理文件。您可以将缓冲区设置为您想要的大小,并一次读取任意数量的字节。您甚至会看到一个合适的地方来调用您的加密例程。

-writeToFile:atomically:使用您创建的 NSMutableData 实例,您可以使用或将其写入磁盘-writeToURL:atomically:

试一试,并在您的努力中向您致以最良好的祝愿。

于 2012-04-04T15:00:23.173 回答