У меня есть XML-файл, который имеет определенные свойства и отображения, определенные в нем. Эти свойства меняются очень редко. Я не хочу перезагружать и оценивать свойства/сопоставления каждый раз, когда я вызываю использование моего файла jar. Есть ли способ предварительной компиляции моего XML-файла в объект, чтобы значения XML сохранялись в объекте? Всякий раз, когда я меняю XML-файл, если когда-либо, мне просто нужно перекомпилировать его один раз.«Сохранение» объекта для будущего использования в Java
ответ
Вы можете просто использовать файл Java для определения этих свойств и сопоставлений для начала. Не нужно связываться с XML, если вы не собираетесь использовать его для загрузки без перекомпиляции.
Вы хотите создать класс со всеми полями? Но даже «окончательные» объекты оцениваются во время выполнения, если они не являются примитивными типами? –
Да, это в основном то, что я имею в виду. Строковые литералы также не будут «оцениваться во время выполнения».Тем не менее, если вы беспокоитесь о накладных расходах на создание карты или каких-либо структур данных, которые вам нужно создать для этой цели, вы хватаете преждевременную оптимизацию соломинок. Несколько раз в минуту не много, и я чувствую, что вы пытаетесь оптимизировать, основываясь на своем восприятии того, что будет или не будет быстро, без фактического измерения. – ColinD
Благодарим за предупреждение о преждевременной оптимизации. Я часто делаю это довольно часто ... да, наверное, я должен сначала измерить время. На самом деле я также могу использовать для этого структуру java.util.Properties. Является ли свойство лучше, чем xml-файл? –
После того, как вы прочитали свои XML-данные в объекте, вы можете записать его в файл с помощью Serialization и проверить в следующий раз, прежде чем загружать источник XML, был ли он изменен (путем сравнения их временных меток). В случае, если источник XML не изменился, вы можете просто восстановить объект конфигурации путем де-сериализации из файловой системы.
Спасибо ... это, кажется, лучший подход, когда я измеряю разницу во времени загрузки. –
Это не может считаться лучшей практикой в мире ... но если вы хотите сделать это за пределами какой-либо конкретной структуры, вы всегда можете просто использовать простую валидную сериализацию Java. Это именно то, о чем вы говорите ... хранение объекта на диске (или что-то еще) и последующее восстановление его в памяти. Проверьте this tutorial, если предмет незнакомый.
Вы можете прочитать данные из XML в объект java, а затем serialize этот объект. Вы даже можете проверить свой объект на отметке времени файла xml и автоматически перечитать его при его изменении.
Пара а вопросы, которые могут помочь вам найти подход являются:
- Насколько велик ваш файл XML?
- Сколько времени вам нужно, чтобы разобрать его и превратить в объект?
- Нельзя ли запретить этот процесс (загрузить + parse + convert to object) каждый раз, когда загружается ваша библиотека?
Весна делает именно это; вы настраиваете контекст с помощью XML и загружаете приложение, разбираете и создаете объекты в соответствии с вашей конфигурацией. Я имел дело с большими XML-файлами весной, и могу сказать, что это довольно быстро - и, учитывая, что это делается только один раз, при загрузке, это почти никогда не проблема.
Весна также имеет alternative, в которой ваша конфигурация является фактическим кодом, но я предполагаю, что вы хотите придерживаться конфигурации XML.
В другом подходе имеется инструмент для чтения XML, преобразования его в объект и последующего хранения этого объекта в файле с использованием сериализации объектов. Затем вы можете загрузить этот файл как де-сериализованный объект.
Мой xml-файл на самом деле довольно прост и мал .. около 200 узлов, включая атрибуты. Должен ли я по-прежнему смотреть на Spring как опцию? (Я ничего не знаю о весне на данный момент) –
Весна - совершенно новый (удивительный) зверь с совершенно другой целью в целом; Я просто упомянул об этом и как это работает в качестве примера;) Если это такой маленький файл, я бы определенно пошел с загрузкой + parsing + conversion-to-object (также известный как кэшированная конфигурация), когда ваша библиотека инициализируется. Все остальное было бы излишним для очень небольшого прироста производительности. – biasedbit
Просто убедитесь, что вы не разбираете XML-файл каждый раз, когда вам нужна информация от него! – biasedbit
- 1. Сохранение результатов поиска для будущего использования
- 2. Сохранение изображения из галереи для будущего использования
- 3. Сохранение будущего в списке
- 4. Сохранение объекта для использования позже
- 5. Сохранение объекта для последующего использования
- 6. Передача будущего объекта между действиями
- 7. Java: Сохранение свойств объекта
- 8. Является ли DateTime.Now надежным для будущего использования?
- 9. Как (правильно) кэшировать AutomationElements для будущего использования?
- 10. «<» Оператор зарезервирован для будущего использования
- 11. пустой XML элемент для будущего использования
- 12. Когда следует избегать использования будущего в Скале
- 13. группировка стилей CSS для будущего использования
- 14. Как сохранить результат будущего для последующего использования
- 15. Как хранить TableRowSorter SortKeys для будущего использования?
- 16. Сохранение java-объекта PostgreSQL
- 17. Java, сохранение объекта Timezone
- 18. Сохранение состояния объекта на Java без использования внешней памяти
- 19. Java: Сохранение выбранного значения для последующего использования
- 20. Фабрика ждет будущего для построения объекта
- 21. Обратные вызовы для запланированного будущего в java
- 22. Преобразовать будущее в Scala для Java будущего
- 23. Хранение динамических данных в переменной для будущего использования - Angular.js
- 24. Сохранение объектов Java для дальнейшего использования в WebApp, использующем REST
- 25. Сохранение прямоугольника для будущего рендеринга в холсте html5?
- 26. Автоматическое сохранение сложного Java-объекта
- 27. завершение будущего в течение будущего будущего
- 28. Scala, java будущего (?)
- 29. Сохранение объекта в базе данных в Java
- 30. C# Сохранение класса для использования
Вы пытаетесь избежать разбора XML несколько раз по нескольким вызовам или несколько раз в одном вызове? Если первое, пожалуйста, просто не беспокойтесь. Путь слишком большой головной боли для ценности, которую он поставляет. –
Это первая .. но почему бы и нет? Основной класс будет вызываться несколько раз в минуту, и каждый раз он будет пытаться проанализировать XML-файл. Разве не должно быть более выгодным в первом случае хранить его? –