Наше приложение должно отображать большой кусок данных с минимальным количеством удаленных HTTP-запросов, поэтому мы добавили конечную точку к нашему бэкэнду, которая предоставляет все необходимые данные в виде одного ответа json. Это дает ~ 1. 5 МБ (сжатый) или примерно 8 МБ несжатого текста в формате json.
Не представляет большой проблемы, он загружается за 10–30 секунд, и мы используем ASIHTTPRequest для записи всего ответа на диск.
Теперь идет самое интересное - после считывания несжатого файла в строку с отображением в память мы используем json-framework stig , чтобы преобразовать его в NSDictionary. Это очень хорошо сработало для остальной части нашего приложения и типичного ответа json размером 2 КБ для остальных конечных точек нашего API. Однако десериализация этих 8 МБ данных занимает от пары секунд (симулятор) до минут (3G и iPod Touch 2-го поколения).
Я ищу лучший способ чтения всех этих данных.
Я бы хотел люблю использовать бинарные списки, обслуживаемые прямо из серверной части, но мы используем Java, а я не t нашел подходящую библиотеку, которая соответствует нашим требованиям, и с такими жесткими сроками написание нашей собственной может быть не лучшей идеей.
Если это хоть как-то помогает, то строка 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" }
]
}
Каков наиболее эффективный метод чтения этой строки в формате json размером 8 МБ в словарь NSDictionary в памяти?