iOS - есть ли фреймворк, обслуживающий огромное количество произвольных двоичных данных в виде plist или xml? - PullRequest
0 голосов
/ 09 февраля 2012

Я знаю, что по некоторым причинам производительности не рекомендуется использовать plist или xml для огромного количества произвольных двоичных данных.

Предположим, мой формат данных - это массив (некоторые строки, целые числа, двоичные данные), где размер двоичных данных превышает несколько мегабайт (не фиксировано), а размер архива - сотни, скажем. Я хочу сериализовать и хранить все данные в одном файле в моей папке Documents и считывать только некоторые из них из этого файла в память. Итак, я сначала подумал, что использование plist - это способ выполнить требование, но, как уже упоминалось выше, это не очень хороший способ.

Один из способов избежать этой проблемы - использовать пути двоичных данных вместо двоичных данных, а затем я могу использовать Core Data или что-то подобное. Но тогда это не удовлетворяет требованию.

Я потратил несколько дней, чтобы найти подходящие рамки, похоже, их нет. Должен ли я создать свои собственные методы кодирования и удаления в моем случае? NSArchiving достаточно, чтобы выполнить мое требование?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

NSCoding на самом деле просто создает двоичный Plist, поэтому производительность будет аналогичной (XML-списки, встроенные в ваше приложение, преобразуются в двоичные при создании).

(к вашему сведению, если вы берете файл NSCoded и ставите .plist в конце, вы можете открыть его в редакторе Plist и просмотреть все свойства, хотя на самом деле содержимое не читается человеком, как обычный plist),

Хотя списки довольно быстрые - вероятно, достаточно быстрые для файла размером в несколько МБ. Вы на самом деле пытались просто использовать Plist для этого?

Другой альтернативой является использование файла JSON и загрузка его с помощью JSONKit. JSONKit оценили свою производительность как более быструю при загрузке, чем даже бинарный plist: http://www.cocoanetics.com/2011/03/json-versus-plist-the-ultimate-showdown/

Если это все еще не достаточно быстро, следующим лучшим вариантом будет сохранение его в базе данных SQLLite, хотя это намного больше работы. Базы данных, как правило, намного удобнее для загрузки только части файла, хотя, поскольку вам не нужно загружать всю партию в память, вы можете просто получить нужные вам части.

0 голосов
/ 09 февраля 2012

Вы не хотите использовать XML или текстовые списки.Я думаю, что сначала попробую NSCoding & друзей, см. Руководство по архивам и сериализации .Но если вам действительно нужно сохранить все это в одном файле, а затем прочитать только его части, я думаю, вы сами.Как насчет базы данных?

...