如何在不完全加载Cocoa的情况下访问二进制文件数据?

时间:2012-06-08 20:25:59

标签: objective-c cocoa file hash loading

我在cocoa中编写了一个小实用程序来计算文件的MD5,SHA-1和其他哈希函数。如果理解正确,至少MD5算法可以通过这样的方式实现,我只需要同时加载文件的一小部分 - 这似乎是一个好主意,因为我不想占用所有用户的RAM,然后一些只是为了计算10-Gb存档的哈希值。

如何使用Cocoa实现这一目标?

3 个答案:

答案 0 :(得分:3)

NSData可以对文件进行内存映射,以便底层操作系统(Mac OS或iOS)虚拟内存系统根据需要自动分页文件的各个部分。使用其中一个NSData构造函数和options:参数以及NSDataReadingMappedIfSafe or NSDataReadingMappedAlways选项。

答案 1 :(得分:1)

要做到这一点,没有内存映射文件,这可能是充满了,你可以使用NSFileHandle,只需使用-readDataOfLength:以任何大小的块读取数据。

答案 2 :(得分:1)

你在cocoa中有三个选择:

  • 内存映射NSData
  • NSStream
  • NSFileHandle

我有开源代码显示ow在这里使用流:https://github.com/karelia/KSCrypto/blob/master/KSSHA1Stream.h