Сохранить NSData при отображении памяти

То, что я надеюсь сделать, может или не может быть возможным, но я попробую. Я пытаюсь загрузить огромные текстовые файлы с несколькими гигабайтами. В настоящее время я использую NSData с отображением в памяти и загружаю только порции за раз и просто бесконечно прокручиваю их и загружаю видимый в данный момент фрагмент, и все это радует, и это едва порывает пот с памятью (<30 МБ).

Далее я хотел добавить редактирование данных. Я случайно предположил, что могу просто отредактировать эти отображенные в памяти данные и отразить их на диске. Это не похоже на случай. Есть ли способ сказать, эй, данные изменились! обновить файл. Я немного расплывчат в том, как связаны файл и NSData.

Вот как это работает в настоящее время.

// create the memory mapped data:
self.fileData = [NSMutableData dataWithContentsOfURL:url options:NSDataReadingMappedAlways error:outError];

//load a chunk
self.currentRange = NSMakeRange(0, 4096);
void* data = malloc(4096);
[self.fileData getBytes:data range:self.currentRange];
NSString* currentView = [[NSString alloc] initWithBytes:data length:4096 encoding:NSUTF8StringEncoding];

//replace a chunk:
NSData* currentData = [[self.textArea string] dataUsingEncoding:NSUTF8StringEncoding];
[self.fileData replaceBytesInRange:self.currentRange withBytes:[currentData bytes] length:[currentData length]];
//If I close and re-open it doesn't actually work

Есть ли способ сделать это или можно было бы создать NSOutputStream на URL-адрес и каким-то образом поток его части обратно на диск? Есть ли другой способ записи / сохранения данных, отображаемых в памяти? Если я попытаюсь сделать writeToURL: или сравнимая функция, она загрузит все это в реальную память, которая на самом деле не годится.

0 ответов

Другие вопросы по тегам