2015-08-28 4 views
0

Привет Я разрабатываю игру в Java для целей обучения и есть вопрос, касающийся обработки в приложении данныхJava In-Application Storage из Xml данных

Скажем, у меня есть куча файлов XML, хранящий множество статистики для оружейных доспехов и т. д., и я разбираю эти файлы в своем приложении в виде списков;

Примечание. Эти данные никогда не будут меняться и фактически «окончательны», это постоянные данные, которые будут использоваться в игре.

Теперь, мой вопрос заключается в том, сохраните ли вы эти данные (для использования во время игры) в классе (в моем примере здесь одноэлементный) в вашем приложении, к которому вы можете легко получить доступ? Так, например, что-то вроде этого (где список был считан в другом месте с помощью XML-парсер)

public class WeaponData { 

    private List<Weapon> weaponData; 

    public static final WeaponData instance = new WeaponData(parseXml("weapons")); 


    private WeaponData(List<Weapon> data) { 
     weaponData = data; 
    } 

    public static WeaponData getInstance() { 
     return instance; 
    } 

    public List<Weapon> getWeaponData() { 
     return weaponData; 
    } 
} 

И позволяет мне использовать данные с

WeaponData.getInstance().getWeaponData(); 

Если это так, это путь об этом, или есть лучший способ?

Или, единственная альтернатива, о которой я могу думать, заключается в том, чтобы продолжать чтение XML всякий раз, когда это необходимо (что кажется неразумным, с учетом этого, этот поиск данных может (для коммерческого приложения по крайней мере) быть сетевой операцией, даже если в мой случай - это просто чтение hdd). Плюс, если что-то еще, это будет повторяющийся код.

Спасибо за ваше время!

+0

Можете ли вы дать мне обзор того, насколько велик XML, потому что для небольших XML-файлов очень много работы по их сохранению в БД, а выигрыш не так много, вы можете кэшировать значение на диске, но вы будете добавьте сложность, поэтому для меня важно знать размер файла XML. Если мы говорим о Kbs, я предлагаю оставить это как есть. – moxi

+0

Обратите внимание, что '' финал'' касается только справки. Вызов методов объекта, хранящегося в переменной '' final'', не имеет ничего общего с семантикой '' final''. Итак, в приведенном выше примере кто-то может изменить содержимое «Список weaponData'' после его создания – Keith

+0

Ну, я вообще не говорю о БД. Я думаю, что вы неправильно поняли, у меня есть xml-файлы, в которых они все в настоящее время находятся в нескольких килобайтах, я сомневаюсь, что они будут превышать 500 кбит или около того. Но я просто хочу знать, как вы могли бы сделать эти данные доступными (потенциально несколько раз) в приложении. – FinalFind

ответ

1

Вы должны, вероятно, прочитать его один раз и сохранить его, но не хранить его как одноэлементный. Прочитайте WeaponData во время инициализации и сохраните его экземпляр. Если вам не нравится, что вы можете использовать шаблон, который вы предложили, это может быть неудобно позже.

Если вы когда-либо добирались до места, где WeaponData может быть обновлено во время работы приложения, вы можете перечитать его, но не всегда.

+0

Извините за все изменения в этом ответе - я перечитал вопрос и обнаружил, что впервые прочитал его полностью неправильно. –

+0

Итак, в целом, я нахожусь на правильном пути с тем, что я пытаюсь сделать по его звуку, я думаю, что неловкость будет хорошей кривой обучения, если/когда (возможно, когда) я столкнулся с ней. Редактировать: Хорошо, это был довольно сложный вопрос к слову, я полагаю, так что, возможно, было немного сложно понять. – FinalFind

+0

Абсолютно, просто следите за ним :) (Удивительное отношение к тому, как вы это делаете, а затем учитесь , кстати) –

0

Я думаю, что ваш подход будет работать, тем более, что вы упомянули, что данные не станут настолько большими, чтобы они налагали на память. Еще одна проблема - частота, с которой вы должны прочитать данные. Между этими двумя соображениями есть компромисс, но похоже, что маленький размер XML гарантирует немедленное удаление XML в объекты.

Для полноты использования вы должны использовать JAX-B для генерации Java-классов из вашей XML-схемы, а не для развертывания собственного синтаксического анализатора.

Если вы опасаетесь, что данные XML могут измениться, вы можете использовать API WatchService для обнаружения изменений и повторного анализа XML-файла.

+0

Да, JAXB действительно, однако, я не упомянул в своем вопросе, что это для Android, и JAXB не включен в Android (и я бы добавил, что добавлю размер моего apk, если добавлю его). Возможно, вы использовали что-то вроде SimpleXml tho, но так же, как и для обучения, почему бы не разобрать XML сам, пока я нахожусь в нем. Вы также правы выше того, что я должен использовать инъекцию зависимости. Но я считаю, что использование этого добавляет слой сложности (для реализации), в частности, в Android, который я хочу сохранить для своего второго «обучающегося» приложения. Я считаю, что Dagger неплохо работает с Android – FinalFind

Смежные вопросы