如何从指定文件中只读取“N”个字节?
答案 0 :(得分:25)
如果您希望以类似于通过NSData加载文件内容的方式随机访问文件内容,但实际上没有将所有内容读入内存,则可以使用内存映射。这样做意味着磁盘上的文件被视为虚拟内存的一部分,并且将像常规虚拟内存一样被分页输入和输出。
NSError * error = nil;
NSData * theData = [NSData dataWithContentsOfFile: thePath
options: NSMappedRead
error: &error];
如果您不关心获取文件系统错误的详细信息,可以使用:
NSData * theData = [NSData dataWithContentsOfMappedFile: thePath];
然后你只需使用NSData的-getBytes:range:
方法来提取特定的数据,实际上只能从永久存储中读取文件的相关部分;他们也有资格被分页。
答案 1 :(得分:23)
-[NSFileHandle readDataOfLength:]
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *fileData = [handle readDataOfLength:N];
[handle closeFile];
答案 2 :(得分:2)
如果您想避免读取整个文件,可以使用标准的C I / O功能:
#include <stdio.h>
...
FILE *file = fopen("the-file.dat", "rb");
if(file == NULL)
; // handle error
char theBuffer[1000]; // make sure this is big enough!!
size_t bytesRead = fread(theBuffer, 1, 1000, file);
if(bytesRead < 1000)
; // handle error
fclose(file);
答案 3 :(得分:0)
打开文件:
NSData *fileData = [NSData dataWithContentsOfFile:fileName];
读取你想要的字节:
int bytes[1000];
[fileData getBytes:bytes length:sizeof(int) * 1000];