簡體   English   中英

在Java桌面應用程序中保留數據的最佳方法是什么?

[英]What's the best way to persist data in a Java Desktop Application?

我的桌面應用程序中有一個龐大的Java對象樹,我正在嘗試確定將它們作為文件保存到文件系統的最佳方法。

我的一些想法是:

  • 使用DataOutputStream滾動我自己的序列化程序 :這將使我能夠最大程度地控制文件中的內容,但代價是對其進行微觀管理。

  • 使用ObjectOutputStream及其各種相關類的直接舊序列化 :雖然因為我發現數據很脆弱,但我沒有賣掉它。 更改任何對象的結構會破壞它的序列化實例。 所以我被鎖定在似乎是一個可怕的版本化噩夢。

  • XML序列化 :它並不那么脆弱,但直接序列化的速度要慢得多。 它可以在我的程序之外進行轉換。

  • JavaDB :我考慮過這一點,因為我很樂意編寫JDBC應用程序。 這里的區別在於數據庫實例僅在打開或保存文件時保持不變。 它並不漂亮但是......如果以后需要,它確實可以遷移到中央服務器架構,它引入了以更簡單的方式查詢數據模型的可能性。

我很想知道其他人的想法。 而且我希望我錯過了一些比上面更明顯,更簡單的方法。


以下是從以下答案中剔除的更多選項:

  • 對象數據庫 - 具有比ORM方法少得多的基礎結構,並且比XML方法執行速度更快。 謝謝aku

我會選擇最終選項JavaDB(Sun的Derby發行版)並使用像HibernateiBatis這樣的對象關系層。 使用前三個方法意味着您將花費更多時間來構建數據庫引擎而不是開發應用程序功能。

看看Hibernate是一種更簡單的數據庫接口方式。

根據我的經驗,您最好使用嵌入式數據庫。 SQL雖然不夠完美,但通常比設計性能良好且可靠的文件格式容易得多。

我沒有使用過JavaDB,但我對H2SQLite運氣不錯。 SQLite是一個C庫,在部署方面意味着更多的工作。 但是,它具有將整個數據庫存儲在單個跨平台庫中的好處。 基本上,它是預先打包的通用文件格式。 SQLite非常有用,我甚至開始在腳本中使用它而不是文本文件。

如果你正在處理一個小的持久性問題,請小心使用Hibernate。 它增加了很多復雜性和庫開銷。 如果你正在使用大量的表,Hibernate非常好,但如果你只需要幾張表,它可能會很麻煩。

db4objects可能是最好的選擇

來自codehaus.org的XStream

XML序列化/反序列化很大程度上沒有編碼。 您可以使用注釋來調整它。 在我工作的兩個項目中運作良好。

請參閱http://cjugaustralia.org/?p=61上的用戶組演示文稿

我認為這取決於你需要什么。 我們來看看選項:

1)誹謗我! 我甚至都不能證明這一點。 :)

2)如果你需要一個簡單,快速,單一方法的持久性,堅持下去。 它將保持完整的數據圖原樣! 要小心你要堅持持久的物體多久。 正如您自己所指出的,版本控制可能是一個問題。

3)比(2)慢,需要額外的代碼並且可以由用戶編輯。 我只會使用它,數據應該被另一種語言的客戶端使用。

4)如果您需要以任何方式查詢數據,請堅持使用數據庫解決方案。

好吧,我想你已經回答了你的問題:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM