2010-10-04 3 views
1

У меня есть XML-файл, который имеет определенные свойства и отображения, определенные в нем. Эти свойства меняются очень редко. Я не хочу перезагружать и оценивать свойства/сопоставления каждый раз, когда я вызываю использование моего файла jar. Есть ли способ предварительной компиляции моего XML-файла в объект, чтобы значения XML сохранялись в объекте? Всякий раз, когда я меняю XML-файл, если когда-либо, мне просто нужно перекомпилировать его один раз.«Сохранение» объекта для будущего использования в Java

+0

Вы пытаетесь избежать разбора XML несколько раз по нескольким вызовам или несколько раз в одном вызове? Если первое, пожалуйста, просто не беспокойтесь. Путь слишком большой головной боли для ценности, которую он поставляет. –

+0

Это первая .. но почему бы и нет? Основной класс будет вызываться несколько раз в минуту, и каждый раз он будет пытаться проанализировать XML-файл. Разве не должно быть более выгодным в первом случае хранить его? –

ответ

2

Вы можете просто использовать файл Java для определения этих свойств и сопоставлений для начала. Не нужно связываться с XML, если вы не собираетесь использовать его для загрузки без перекомпиляции.

+0

Вы хотите создать класс со всеми полями? Но даже «окончательные» объекты оцениваются во время выполнения, если они не являются примитивными типами? –

+0

Да, это в основном то, что я имею в виду. Строковые литералы также не будут «оцениваться во время выполнения».Тем не менее, если вы беспокоитесь о накладных расходах на создание карты или каких-либо структур данных, которые вам нужно создать для этой цели, вы хватаете преждевременную оптимизацию соломинок. Несколько раз в минуту не много, и я чувствую, что вы пытаетесь оптимизировать, основываясь на своем восприятии того, что будет или не будет быстро, без фактического измерения. – ColinD

+0

Благодарим за предупреждение о преждевременной оптимизации. Я часто делаю это довольно часто ... да, наверное, я должен сначала измерить время. На самом деле я также могу использовать для этого структуру java.util.Properties. Является ли свойство лучше, чем xml-файл? –

2

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

+0

Спасибо ... это, кажется, лучший подход, когда я измеряю разницу во времени загрузки. –

1

Это не может считаться лучшей практикой в ​​мире ... но если вы хотите сделать это за пределами какой-либо конкретной структуры, вы всегда можете просто использовать простую валидную сериализацию Java. Это именно то, о чем вы говорите ... хранение объекта на диске (или что-то еще) и последующее восстановление его в памяти. Проверьте this tutorial, если предмет незнакомый.

0

Вы можете прочитать данные из XML в объект java, а затем serialize этот объект. Вы даже можете проверить свой объект на отметке времени файла xml и автоматически перечитать его при его изменении.

2

Пара а вопросы, которые могут помочь вам найти подход являются:

  • Насколько велик ваш файл XML?
  • Сколько времени вам нужно, чтобы разобрать его и превратить в объект?
  • Нельзя ли запретить этот процесс (загрузить + parse + convert to object) каждый раз, когда загружается ваша библиотека?

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

Весна также имеет alternative, в которой ваша конфигурация является фактическим кодом, но я предполагаю, что вы хотите придерживаться конфигурации XML.

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

+0

Мой xml-файл на самом деле довольно прост и мал .. около 200 узлов, включая атрибуты. Должен ли я по-прежнему смотреть на Spring как опцию? (Я ничего не знаю о весне на данный момент) –

+0

Весна - совершенно новый (удивительный) зверь с совершенно другой целью в целом; Я просто упомянул об этом и как это работает в качестве примера;) Если это такой маленький файл, я бы определенно пошел с загрузкой + parsing + conversion-to-object (также известный как кэшированная конфигурация), когда ваша библиотека инициализируется. Все остальное было бы излишним для очень небольшого прироста производительности. – biasedbit

+0

Просто убедитесь, что вы не разбираете XML-файл каждый раз, когда вам нужна информация от него! – biasedbit

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