Я использую Простую библиотеку XML для обработки файлов XML в моем приложении для Android. Эти файлы могут быть довольно большими - около 1 МБ, и могут быть вложены довольно глубоко, поэтому они довольно сложны.
Когда приложение загружает один из этих файлов через Simple API, его выполнение может занять до 30 секунд. В настоящее время я передаю FileInputStream в метод [read (Class, InputStream)] [2] класса Persister Simple. По сути, он просто читает узлы XML и сопоставляет данные с экземплярами объектов моей модели, реплицируя древовидную структуру XML в памяти.
Мой вопрос: как мне улучшить производительность на Android? Моя текущая мысль заключается в том, чтобы прочитать содержимое файла в байтовый массив и передать взамен ByteArrayInputStream в метод чтения Persister. Я полагаю, что время для обработки файла будет быстрее, но я не уверен, что сэкономленное время будет противодействовать времени, потраченному на чтение всего файла первым. Также могут быть проблемы с памятью.
Это поручение дураков? Что еще я мог сделать, чтобы увеличить производительность в этой ситуации? В противном случае мне просто придется прибегнуть к улучшению обратной связи с пользователем о ходе загрузки файла.
Некоторые предостережения:
1) Я не могу изменить используемую библиотеку XML - рассматриваемый код является частью «движка», который используется в настольных, мобильных и веб-приложениях. Расходы на его изменение были бы слишком большими для времени.
2) Файлы данных создаются пользователями, поэтому я не могу контролировать размер / глубину вложения в них.