【问题标题】:Creating NSData from a file reading it in chunks从文件中创建 NSData 以块的形式读取它
【发布时间】:2012-04-18 07:07:45
【问题描述】:

某段代码是这样工作的:

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

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

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

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

我的问题是:

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

【问题讨论】:

  • 您需要说明您在这方面有什么问题吗?
  • 分块读取文件,对其进行处理并将它们写回以形成一个新文件。我只是不太精通这种低级的东西,比如操纵记忆之类的东西,我想我得读一些理论了

标签: cocoa nsdata


【解决方案1】:

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

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

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

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

试一试,祝你一切顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2020-12-08
    • 2016-03-16
    相关资源
    最近更新 更多