有没有办法使用内存映射文件访问从文件创建 CFData 对象?

Rob*_*ger 3 macos cocoa cocoa-touch objective-c core-foundation

我仅限于在特定应用程序中使用 CoreFoundation,并且无权访问NSData.

我需要使用内存映射从文件访问数据,因为文件可能非常大。使用NSData,我可以使用+dataWithContentsOfURL:options:error:方法来实现这一点,传入NSDataReadingMappedAlways选项。

有可能做到这一点CFData吗?我能找到的唯一一个CFData直接从文件创建对象的CFURLCreateDataAndPropertiesFromResource()函数是函数,它没有任何设置内存映射标志的选项。

是否有CFData使用内存映射读取从文件加载对象的低级方法?我必须下降到mmap什么地方吗?

Lil*_*ard 5

您可以CFData()从字节缓冲区和计数创建一个。鉴于此,您应该能够访问mmap()有问题的文件,然后将映射的字节缓冲区传递给CFDataCreateWithBytesNoCopy(). 唯一真正的复杂之处是您需要使用CFAllocatorRef知道如何munmap()作为bytesDeallocator.