Наше приложение должно отображать большой кусок данных с минимальными удаленными http-запросами, поэтому мы добавили конечную точку в наш бэкэнд, которая предоставляет все необходимые данные в виде одного ответа json. В результате получается ~ 1,5 МБ (сжатый) или примерно 8 МБ несжатого текста в формате json.
Немного проблем, он загружается через 10 - 30 секунд, и мы используем ASIHTTPRequest для записи всего ответа на диск.
Теперь самое интересное - после считывания несжатого файла в отображенную в память строку мы используем стиг json-framework , чтобы преобразовать его в NSDictionary. Это сработало очень хорошо для остальной части нашего приложения и типичного ответа json размером 2 КБ для остальных наших конечных точек API. Однако десериализация этих 8 МБ данных занимает от пары секунд (симулятор) до минут (3G и iPod Touch 2-го поколения).
Я изучаю наилучший подход для чтения всех этих данных.
Я бы с удовольствием использовал бинарные списки, обслуживаемые прямо из бэкэнда, но мы используем Java, и я не нашел подходящей библиотеки, которая бы соответствовала нашим требованиям, и при таких сжатых сроках написания собственных, возможно, не лучший идея.
Если это поможет каким-либо образом, строка json, которую мы анализируем, в основном представляет собой массив элементов X, например:
{
"items": [ { "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" },
{ "key1": "value1", "key2": "value2" }
]
}
Какой самый эффективный метод для чтения этой строки в формате MB json размером 8 МБ в NSDictionary в памяти?