我想在不读取整个文件的情况下获取文件的前 8 个字节左右。我正在使用 NSData 对数据等进行操作,但我不想通过过多的文件读取和写入来减慢我的应用程序的速度,因为在某些情况下,我必须读取一个 200 KB 的文件才能提取前 2文件中的数据字节。有没有办法只读取或写入文件的一部分而不用 iOS SDK 在 Xcode 中读取或覆盖整个内容?
我使用的文件系统只是可以通过 NSFileManager 类访问的默认文件系统(我不知道任何其他 iOS 文件系统)。
使用标准 C 文件 API(FILE* 或 int 文件描述符)。需要注意的是,您必须正确地将字符串路径转换为正确的 char* 文件路径。另外,完成后不要忘记关闭文件。考虑 NSData 上的一个类别,有点像这样......
+ (id)dataWithContentsOfFile:(NSString *)filePath numBytes:(NSUInteger)numBytes
{
void *bytes = malloc(numBytes);
NSData *result = [NSData dataWithBytesNoCopy:bytes length:numBytes];
char const *path = [[NSFileManager defaultManager] fileSystemRepresentationWithPath:filePath];
int fd;
if ((fd = open(path, O_RDONLY)) < 0 || read(fd, bytes, numBytes) != numBytes) {
result = nil;
}
close(fd);
return result;
}
您可以利用更高级别的NSFileHandle
课程。该类NSFileHandle
是文件描述符的面向对象的包装器。您使用文件句柄对象来访问与文件、套接字、管道和设备相关的数据。对于文件,您可以在文件中读取、写入和查找。对于套接字、管道和设备,您可以使用文件句柄对象来监控设备并异步处理数据。
- (NSData *)readDataOfLength:(NSUInteger)length
您可以在官方文档NSFileHandle 类参考中获得更多信息