Выполнение сериализации и Google Android

Я ищу совет ускорить выполнение сериализации, конкретно при использовании Google Android. Для проекта я продолжаю работать, я пытаюсь передать пару сотни объектов от сервера до приложения для Android и прохожу различные этапы для получения производительности, в которой я нуждаюсь.

Сначала я попробовал ужасный синтаксический анализатор XML, что я взломал вместе Сканер использования специально для этого проекта, и это вызвало невероятно медленную производительность при загрузке объектов (~5 минут для файла 300 КБ). Я затем переехал от этого и заставил свои классы реализовать сериализуемый и записал ArrayList объектов, которые я имел в файл. Чтение того файла в объекты, Android, с файлом, уже загруженным, обратите внимание, занимал ~15-30 секунд для ~100KB, сериализировало файл. Я все еще нахожу это абсолютно недопустимым для приложения для 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;
}

ЕСЛИ Externalizable является способом пойти для увеличения производительности, есть ли информация относительно того, как Java называет методы в объектах, когда Вы пытаетесь выписать его? Я не уверен, должен ли я реализовать его в родительском классе, ни как я пошел бы о сериализации вложенных объектов в каждом объекте.

12
задан Johan Henkens 27 May 2010 в 00:53
поделиться

1 ответ

Никогда не используйте Serializable в разных архитектурах. У вас нет возможности узнать, будет ли виртуальная машина Dalvik иметь совместимую сериализацию с версией Java вашего сервера. Даже если он работает сегодня, он может не иметь обновлений с обеих сторон. Всегда выбирайте то, что разработано специально для работы с разными архитектурами.

Параметры включают:

  • Буферы протокола
  • Apache Thrift (упаковка полезной нагрузки, не обязательно материал RPC)
  • XML (вы не упомянули, какой синтаксический анализатор вы использовали - если вы использовали DOM, попробуйте SAX)
  • JSON (как сообщается, синтаксический анализатор JSON Джексона быстрее, чем синтаксический анализатор org.json, встроенный в Android)

Кроме того, загрузка 300 КБ данных при запуске приложения является рецептом для неприятностей. Пожалуйста, подумайте об использовании SQLite, чтобы вы могли одновременно работать только с теми битами данных, которые вам нужны.

10
ответ дан 2 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: