2009-01-16 98 views
15

什麼是持久化Java對象的輕量級選項?什麼是持久化Java對象的輕量級選項

我正在尋找最簡單的可能解決方案。我不想要任何花哨的功能,只是簡單的與簡單的對象(一些集合,關係和簡單的繼承)一起工作,並沒有給現有的代碼庫帶來太多明顯的複雜性(如果有的話)。

我知道的選項包括Hibernate和EMF等框架,但它們聽起來(並且經歷過)太複雜和耗時。我希望開箱即用,最好是面向文件的,而不是面向dababase的,我可以放在我的普通的舊Java對象的頂部。

這是一個新手問題,預先感謝任何類似教程的上下文澄清指導。

回答

5

ObjectOutputStream和ObjectInputStream可以做到這一點。它內置於Java中,可讓您輕鬆地序列化/反序列化對象。

這些壞事是,如果你改變你的對象,你不能導入現有的舊對象。您必須考慮一種方法來保持與已存在用戶計算機上的現有對象的兼容性,例如向類中添加版本號並創建將舊對象轉換爲新對象的功能。

此處瞭解詳情:

編輯: 您也可以考慮加入以下屬性所有的類了蝙蝠的權利。這可能允許您將屬性添加到類中,並且仍然可以加載舊的Object文件。在RMI-land中可行,但我不確定文件。不要永遠刪除屬性。

static final long serialVersionUID = 1L; 
9

db4o是一個對象數據庫,所以沒有架構設置,並很好地適應一段時間內的對象結構的變化。

+1

我真的很喜歡db4o,所以很好,很簡單。 – 2009-01-16 16:03:16

+0

不幸的是'db4o已經死了http://supportservices.actian.com/versant/default.html – FoxyBOA 2015-07-19 07:01:12

2

一個簡單的方法是序列化(如在Serializable中)你的對象到磁盤。

http://www.devx.com/Java/Article/9931/1954

+0

序列化唯一的問題是,如果你完全改變你的objcet,它就會掉在臉上。 – Milhous 2009-01-16 20:13:47

+0

如果您將serialVersionUID添加到您的類中,您至少可以添加屬性。您仍然無法刪除屬性。使用java附帶的serialver工具來找出你的類當前有哪些serialVersionUID。 – 2011-05-12 11:57:04

0

我不得不說對Hibernate最初的學習曲線相對較淺。您應該能夠在不到一天的時間內啓動並運行測試系統。只有當你想要更先進的功能時,它纔開始變得更陡峭。我會建議你一定要看看,如果你最終沒有選擇它,我的意思是什麼?

話雖如此,你有沒有考慮過直接序列化你的對象到磁盤,如果你只是想快速ñ髒?

4

嘗試簡單的XML持久性http://simple.sourceforge.net。它非常簡單,不需要配置。只需拿出現有的POJO並對它們進行註釋,然後就可以將它們讀取並寫入文件。支持循環對象圖以及所有Java集合。它可以像這樣使用。

Serializer serializer = new Persister(); 
MyObject object = serializer.read(MyObject.class, new File("file.xml)); 

和寫作是一樣簡單

serializer.write(myInstance, new File("file.xml")); 

這是一個非常輕量級的方法,不超過標準的Java 1.5其他依賴關係。與XML技術的其他對象(如JAXB,XStream,Castor)相比,它們依賴於其他項目的整個主機。簡單XML非常輕便且具有內存高效性。

6

如果你正在尋找一些簡單的東西,你可能也希望數據採用你可以讀取的格式(而不是二進制文件或數據庫)。如果是這樣,您應該看看Java 6及更高版本中的JAXB(Java的XML綁定)。還有其他的技術可以做得更好,比如XML Beans,但是這個內置了。

從Java的API看一下這個頁面。對Java對象進行序列化和反序列化非常簡單。

http://java.sun.com/javase/6/docs/api/javax/xml/bind/JAXBContext.html

基本上你使用以下命令:

JAXBContext jc = JAXBContext.newInstance("com.acme.foo"); 

    // unmarshal from foo.xml 
    Unmarshaller u = jc.createUnmarshaller(); 
    FooObject fooObj = (FooObject)u.unmarshal(new File("foo.xml")); 

    // marshal to System.out 
    Marshaller m = jc.createMarshaller(); 
    m.marshal(fooObj, System.out); 

只要確保你的FooObject具有@XmlRootElement註釋。 Java bean屬性會自動解析,但您可以使用其他註釋來控制XML如何查看和建模更復雜的對象。

1

我知道的最簡單的選擇是使用Xstream來創建一個xml文件出任何java的obect。

3

您可以試試XStream這是一個開源庫。它所做的只是將POJO轉換爲XML,然後將其保存到磁盤中。它非常易於使用,只需要幾行代碼即可使用。