2013-02-15 66 views
-1

我需要在會話之間保存用戶數據。所以我決定使用二進制序列化並開始將數據保存在xml中。經過一番研究,我發現了幾個API,即JAXB和xStream。爲數據序列化選擇什麼API到XML?

我看了一下xStream的示例,我喜歡它。這很簡單。用兩個詞來表示:你給一個對象並接收這個對象的.xml表示。讀取一個xml並接收對象。

然後我讀了JAXB - 它非常強大,功能強大。但是我發現的所有示例都是關於創建xml模式,基於此模式生成java類等等。目前,我用.xsd描述我的類看起來有點費時。我希望它是JAXB使用的許多方面之一。但是我所看到的,讓我擔心了一點。

是否有任何其他API適合我的任務。或者JAXB和xStream的優缺點呢?

+0

看看http://jibx.sourceforge.net/ – Abubakkar 2013-02-15 11:06:40

+0

拍攝對象相當廣泛覆蓋已經: http://stackoverflow.com/questions/5867353/what-is-the-simplest-and-minimalistic-java-xml-api?rq=1 http://stackoverflow.com/questions/736343 /什麼,是最最好的方式到轉換-A-Java的對象到XML-WI th-open-source-apis?rq = 1 不過,我在下面給你我的答案。 :) – 2013-02-15 11:13:42

+0

您可能會發現以下有用:http://blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-xstream.html – 2013-02-15 14:14:41

回答

3

我會從JAXB開始,因爲它內置且易於使用。你不需要從XSD開始。只需添加一些註釋到你的課堂。

@XmlRootElement(name="doc") 
public class Document { 
    @XmlElement 
    protected Foo foo; 
    // ... 
} 

連載:

Document doc = new Document(); 

JAXBContext jc = JAXBContext.newInstance(Document.class); 
Marshaller m = jc.createMarshaller(); 
m.marshal(doc, System.out); 

反序列化:

JAXBContext jc = JAXBContext.newInstance(Document.class); 
Unmarshaller u = jc.createUnmarshaller(); 
Document doc = u.unmarshal(System.in); 

更換System.outSystem.in通過您的實際流,你準備好去。

有關於在JAXB教程JAXB註解一個簡短的教程:

+0

哦。如果沒有xsd的先決條件就有辦法工作 - 這很好。謝謝。 – Dragon 2013-02-15 11:51:38

+0

+1 - @Dragon,另外,由於JAXB(JSR-222)實現是異常配置,因此只需要添加註釋,以便XML表示與默認設置不同:http://blog.bdoughan.com/2012/ 07/JAXB-沒有註釋,required.html – 2013-02-15 14:12:01

0

當JAXB有點過於強大,更簡單的解決方案可能會更好時,我通常會嘗試Castor

好的部分是,您可以使用簡單的自省模式,快速簡單,如果您覺得您需要更多控制生成的XML,請添加描述符或映射,但都是可選的。