Расшифровка 250 МБ PDF-файла - PullRequest
0 голосов
/ 23 июля 2011

В моем проекте X-Code у меня есть зашифрованный файл PDF размером 250 МБ, который мне нужно расшифровать и отобразить во время выполнения.Поскольку размер файла большой, я не могу его расшифровать.Поэтому я разбил оригинальный файл на куски NSData, зашифровал их в разные файлы деталей.В коде я расшифровываю эти несколько фрагментов и записываю их в один файл, а затем отображаю его.

   NSData *decryptedData = [[NSData alloc] init];
   NSString *thepath = [NSString stringWithFormat:@"%@/decryptedfile.%@",[paths objectAtIndex:0], fileType];
   [decryptedData writeToFile:thepath atomically:YES];
   [decryptedData release];
   NSFileHandle *myFile = [NSFileHandle fileHandleForUpdatingAtPath:thepath];
   [myFile truncateFileAtOffset:0];
   for (int k=1; k<50; k++) { //i had 49 parts, hence the condition
      NSString *partFilePath = [NSString stringWithFormat:@"%@/%@-part%d.pdf",[paths objectAtIndex:0], [fileName objectAtIndex:i], k];
      NSData *tempDData = [[NSData alloc] initWithContentsOfFile:partFilePath];
      [myFile writeData:[tempDData AES256DecryptWithKey:@"secretkey"]];
      [tempDData release];
   }
   [myFile closeFile];

У меня было 49 частей, и я расшифровываю их каждую, записывая в один файл.Эта программа отлично работает в симуляторе и может восстановить мой оригинальный PDF.Но на устройстве мое приложение закрывается.Его прерывание происходит, когда цикл for повторяется в 31-й раз и когда я пытаюсь записать мои расшифрованные данные в папку «Документы» приложения.Другими словами, когда я пытаюсь добавить данные размером более 150 МБ, мое приложение закрывается.Есть ли другой способ реализовать эту функцию?

1 Ответ

0 голосов
/ 23 июля 2011

Попробуйте вызывать

[myFile synchronizeFile];

на каждой итерации;это очищает буфер.Если это не сработает, я полагаю, вам нужно перейти ниже Foundation и напрямую использовать небуферизованный io на уровне BSD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...