18

如何从指定文件中仅读取“N”个字节?

4

4 回答 4

26

如果您希望以类似于通过 NSData 加载文件但不实际将所有内容读入内存的方式随机访问文件的内容,则可以使用内存映射。这样做意味着磁盘上的文件被视为虚拟内存的一部分,并且将像常规虚拟内存一样被分页和分页。

NSError * error = nil;
NSData * theData = [NSData dataWithContentsOfFile: thePath
                                          options: NSMappedRead
                                            error: &error];

如果您不关心获取文件系统错误详细信息,则可以使用:

NSData * theData = [NSData dataWithContentsOfMappedFile: thePath];

然后你只需使用 NSData 的-getBytes:range:方法来提取特定的数据,实际上只会从永久存储中读取文件的相关部分;他们也将有资格被调出。

于 2009-06-01T20:02:05.647 回答
24

-[NSFileHandle readDataOfLength:]

NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *fileData = [handle readDataOfLength:N];
[handle closeFile];
于 2009-06-01T19:00:19.330 回答
3

如果你想避免读取整个文件,你可以使用标准的 CI/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);
于 2009-06-01T18:24:18.103 回答
0

打开文件:

NSData *fileData = [NSData dataWithContentsOfFile:fileName];

读取你想要的字节:

int bytes[1000];
[fileData getBytes:bytes length:sizeof(int) * 1000];
于 2009-06-01T18:18:52.353 回答