Как лучше всего сохранить данные в приложении Java Desktop?

StackOverflow https://stackoverflow.com/questions/37271

  •  09-06-2019
  •  | 
  •  

Вопрос

У меня есть большое дерево объектов Java в моем настольном приложении, и я пытаюсь определить лучший способ сохранить их в качестве файла в файловую систему.

Некоторые мысли у меня были:

  • Закатать мой собственный сериализатор, используя DataOutputStream: Это дало бы мне наибольший контроль того, что было в файле, но за счет его микроуправления.

  • Прямая старая сериализация с использованием objectOutputStream и его различных связанных классов: Я не продан на нем, хотя, так как я нахожу данные хрупкими. Изменение структуры любого объекта нарушает сериализованные экземпляры. Так что я зафиксирован к тому, что кажется ужасным кошмаром по уходу за версией.

  • XML -сериализация: Это не так хрупко, но значительно медленнее, что прямо сериализация. Это может быть преобразовано вне моей программы.

  • Javadb: Я рассмотрел это с тех пор, как мне удобно писать приложения JDBC. Разница здесь в том, что экземпляр базы данных будет сохраняться только во время открытия или сохранения файла. Это не красиво, но ... оно подходит для перехода на архитектуру центрального сервера, если необходимость возникает позже, и вводит возможность просить датамодель более простым образом.

Мне любопытно посмотреть, что думают другие люди. И я надеюсь, что я пропустил какой -то очевидный и более простой подход, чем вышеуказанный.


Вот еще несколько вариантов, выброшенных из ответов ниже:

  • База данных объектов - имеет значительно меньшую инфраструктуру, чем ORM подходит, и работает быстрее, чем XML -подход. Спасибо, Аку
Это было полезно?

Решение

db4objects Может быть лучшим выбором

Другие советы

Я бы пошел на ваш последний вариант Javadb (Sun's Distribution дерби) и используйте объектный реляционный слой, подобный С зимний или ибатис. Полем Использование первых трех походов означает, что вы собираетесь потратить больше времени на создание двигателя базы данных, чем разработка функций приложения.

Посмотрите на Hibernate как более простой способ взаимодействия с базой данных.

По моему опыту, вам, вероятно, лучше использовать встроенную базу данных. SQL, хотя и не идеально, обычно намного проще, чем разработка формата файла, который работает хорошо и является надежным.

Я не использовал javadb, но мне повезло с H2 и SQLite. Полем SQLite - это библиотека C, которая означает немного больше работы с точки зрения развертывания. Тем не менее, он имеет преимущество в хранении всей базы данных в одной кроссплатформенной библиотеке. По сути, это предварительно упакованный, общий формат файла. SQLite был настолько полезен, что я даже начал использовать его вместо текстовых файлов в сценариях.

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

Xstream от codehaus.org

XML -сериализация/десериализация в основном без кодирования. Вы можете использовать аннотации, чтобы настроить его. Хорошо работаю в двух проектах, где я работаю.

Смотрите презентацию моей группы пользователей в http://cjugaustralia.org/?p=61

Я думаю, что это зависит от того, что вам нужно. Давайте посмотрим на варианты:

1) Снижал Имедиалли! Я даже не оправдываю. :)

2) Если вам нужна простая, быстрое, одно метод, оставайтесь с ним. Он сохранит полный график данных, как есть! Остерегайтесь того, как долго вы будете хранить сохраняемые объекты. Как уже отмечалось, вывод версий может быть проблемой.

3) Медленнее, чем (2), нуждается в дополнительном коде и может быть отредактирован пользователем. Я бы использовал его только то, что данные должны использоваться клиентом на другом языке.

4) Если вам в любом случае нужно запросить данные, придерживайтесь решения БД.

Ну, я думаю, ты уже ответил на свой вопрос :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top