从以块为单位读取它的文件创建NSData

时间:2012-04-04 14:39:31

标签: cocoa nsdata

某段代码的工作原理如下:

  1. 从磁盘读取文件并将其作为NSData存储在内存中
  2. 加密(解密)它,从而导致内存中相同大小的额外NSData对象
  3. 将加密(解密)数据写入磁盘
  4. 现在,对于大小为10或100 mb的文件,这样可以正常运行并保持每秒处理字节的一致速率(因此处理100 mb文件将需要10 x 10 mb文件)。如果我说1.5演出,那么系统必须保留2个内存,以便它开始交换到磁盘,这会大大降低速度。

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

    1. 查看文件并将其拆分为100mb块(例如)
    2. 阅读一个块
    3. 加密(解密)
    4. 将加密的块附加到输出文件
    5. 扔掉原来的大块,这样整个过程最多需要200mb的RAM
    6. 我的问题是:

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

1 个答案:

答案 0 :(得分:1)

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

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

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

使用您创建的NSMutableData实例,然后可以使用-writeToFile:atomically:-writeToURL:atomically:

将其写入磁盘

试一试,并祝你工作顺利。