Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Приступая к работе с Objective-Zip

Anna | 2.07.2014 | нет комментариев
Наверно многие из Вас теснее имели дело со сжатием данных, программируя под iOS.
Вовсе незадолго передо мною появилась задача сходственного рода. В приложении, над которым я работал, необходимо было программно, без потерь данных, сжимать большого объема файлы. Задача состояла в том, что на устройствах, использующих приложение, не неизменно был довольный объем оперативной памяти. Сжимая большой файл целиком, приложение легко падало из-за нехватки памяти.
Нужно было сжимать файл по частям.Перебрав много различных вариантов, я остановился на дюже комфортном для сходственных задач решении. Этим решением является применение библиотеки Objective-Zip.

Об этой крошечной, но дюже комфортной и функциональной библиотеке, я и хочу Вам рассказать.

Objective-Zip — это маленькая Objective-C библиотека, которая оборачивает ZLib и MiniZip в цельную объектно-ориентированную сущность которая предоставляет основные функции для чтения и записи zipфайлов.

Добавление Objective-Zip в Ваш план

Библиотека распространяется только в виде начального кода, так что Вам нужно легко скачать тестовое приложение и скопировать и вставить эти каталоги в собственном плане:

  • ARCHelper;
  • ZLib;
  • MiniZip;
  • Objective-Zip.

Основные представления

Библиотека сфокусирована в классе ZipFile. Он может быть сделан всеобщей Objective-C процедурой alloc с дальнейшей инициализацией init, с указанием в последнем случае — zip-файл будет создаваться, изменяться либо распаковываться:

ZipFile *zipFile= [[ZipFile alloc] initWithFileName:@"test.zip"
    mode:ZipFileModeCreate];

Операции создания и добавления имеют модификатор доступа только запись (read-only), в то время как распаковка — только чтение (write-only). Видимо, что невозможно запрашивать операции создания/добавления при сделанном только для распаковки объекте класса и напротив.

Добавление файла в архив

ZipFile класс имеет несколько способов для добавления новых файлов в zip-архив. Один из способов поддерживает шифрование с поддержкой пароля, иной шифрование не использует. Оба способа возвращают экземпляр ZipWriteStream класса, тот, что будет применяться экстраординарно для записи содержимого файла, а после этого должен быть закрыт:

ZipWriteStream *stream= [zipFile writeFileInZipWithName:@"abc.txt"
    compressionLevel:ZipCompressionLevelBest];

[stream writeData:abcData];
[stream finishedWriting];

Чтение файла из архива

Для начала мы обязаны сделать объект класса ZipFile, задав ему режим распаковки. Дальше мы находим 1-й файл и от него, до самого конца можем считывать все остальное. Считывание происходит с поддержкой класса ZipReadStream, тот, что тоже должен быть закрыт позже применения:

ZipFile *unzipFile= [[ZipFile alloc] initWithFileName:@"test.zip"
    mode:ZipFileModeUnzip];

[unzipFile goToFirstFileInZip];

ZipReadStream *read= [unzipFile readCurrentFileInZip];
NSMutableData *data= [[NSMutableData alloc] initWithLength:256];
int bytesRead= [read readDataWithBuffer:data];

[read finishedReading];

Помните, что в экземпляре NSMutableData, тот, что действует как буфер чтения, поле length должно быть установлено в значение огромнее, чем 0 (readDataWithBuffer API будет применять эту длину, Дабы знать сколько байт дозволено перенести из архива).

Просмотр файлов в архиве

Применяя ZipFile класс в режиме распаковки, легко дозволено получить список файлов архива, заполняяNSArray объектами класса FileInZipInfo. Вы можете и

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB