Производительность сериализации и Google Android
Я ищу советы для ускорения производительности сериализации, особенно при использовании Google Android. Для проекта, над которым я работаю, я пытаюсь передать пару сотен объектов с сервера на приложение Android, и я нахожусь на разных этапах, чтобы получить требуемую производительность.
Сначала я попробовал ужасный синтаксический анализатор XML, который я взломал с помощью Scanner специально для этого проекта, и это вызвало невероятно медленную производительность при загрузке объектов (~ 5 минут для файла 300 КБ). Затем я отошел от этого, и мои классы реализовали Serializable и написали ArrayList объектов, которые у меня были для файла. Чтение этого файла в объекты, которые Android, с уже загруженным файлом, занимал около 15-30 секунд для ~ 100 КБ сериализованного файла. Я по-прежнему считаю это совершенно неприемлемым для приложения для Android, поскольку мое приложение требует загрузки данных при запуске приложения.
Я коротко прочитал о Externalizable и о том, как он может повысить производительность, но я не уверен, как реализовать его с помощью вложенных классов. Прямо сейчас я пытаюсь сохранить ArrayList следующего класса, с вложенными ниже классами.
public class MealMenu implements Serializable{
private String commonsName;
private long startMillis, endMillis, modMillis;
private ArrayList<Venue> venues;
private String mealName;
}
И класс места:
public class Venue implements Serializable{
private String name;
private ArrayList<FoodItem> foodItems;
}
И класс FoodItem:
public class FoodItem implements Serializable{
private String name;
private boolean vegan;
private boolean vegetarian;
}
IF Externalizable - это способ повысить производительность, есть ли какая-либо информация о том, как java вызывает методы в объектах, когда вы пытаетесь это записать? Я не уверен, что мне нужно реализовать его в родительском классе, а также о том, как я буду сериализовать вложенные объекты внутри каждого объекта.
Ответы
Ответ 1
Никогда не используйте Serializable
для архитектур. У вас нет возможности узнать, будет ли у Dalvik VM совместимая сериализация на серверную версию Java. Даже если он работает сегодня, он может быть не с обновлением с обеих сторон. Всегда выбирайте то, что специально предназначено для работы по архитектуре.
Параметры включают:
- Буферы протокола
- Apache Thrift (упаковка полезной нагрузки, не обязательно материал RPC)
- XML (вы пренебрегали упоминанием того, какой парсер вы использовали - если вы использовали DOM, попробуйте SAX)
- JSON (по сообщениям, парсер Jackson JSON быстрее, чем парсер org.json, встроенный в Android).
Кроме того, загрузка 300 тыс. данных при запуске приложения - это рецепт на наличие проблем. Пожалуйста, подумайте над использованием SQLite, чтобы вы могли работать с битами данных, которые вам нужны за раз.