Как читать только "N" байты из указанного файла?
Только чтение "N" байтов из файла в Cocoa
Ответ 1
Если вам нужен произвольный доступ к содержимому файла способом, похожим на загрузку его через NSData, но без фактического чтения всего в памяти, вы можете использовать сопоставление памяти. Это означает, что файл на диске рассматривается как раздел виртуальной памяти и будет выгружаться в него так же, как обычная виртуальная память.
NSError * error = nil;
NSData * theData = [NSData dataWithContentsOfFile: thePath
options: NSMappedRead
error: &error];
Если вам не нужны данные об ошибках файловой системы, вы можете просто использовать:
NSData * theData = [NSData dataWithContentsOfMappedFile: thePath];
Затем вы просто будете использовать метод NSData -getBytes:range:
для вывода определенных фрагментов данных, и только соответствующие части файла будут фактически считаны из постоянного хранилища; они также будут иметь право на выгрузку.
Ответ 2
- [NSFileHandle readDataOfLength:].
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *fileData = [handle readDataOfLength:N];
[handle closeFile];
Ответ 3
Если вы хотите избежать чтения всего файла, вы можете просто использовать стандартные функции ввода/вывода C:
#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);
Ответ 4
Откройте файл:
NSData *fileData = [NSData dataWithContentsOfFile:fileName];
Прочитайте нужные байты:
int bytes[1000];
[fileData getBytes:bytes length:sizeof(int) * 1000];