Производительность сериализации и 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, чтобы вы могли работать с битами данных, которые вам нужны за раз.