XML格式对象序列化(2)
??
XStream與Java.Bean中XML工具的比較
?
???????XStream主要作用是將序列化的對象轉化為一個XML文件或將XML文件解析為一個對象。當然并非只有它可以做到,很多其它工具一樣可以,在Java中存在這樣兩個類XMLDecoder和XMLEncoder,它們是在Java.Bean包下的,它們的作用是將JavaBean轉化為XML或將XML文件轉化為一個Java Bean。
???????XMLDecoder是通過一個輸入流將對象從輸入流中取出并轉化為一個實例的方法。它所需要的就是一個輸入流及一個轉化過程。
?
???????XMLDecoder的實例:
?
???????String fileStr=”xstream.xml”;//XML文件,在本目錄下,延用上次使用文件。
???????ObjectInputStream in=new ObjectInputStream(new FileInputStream(fileStr));//創建一個ObjectInputStream用于輸入。
???????XMLDecoder xmld=new XMLDecoder(in);//創建一個XMLDecoder對象。
???????延用前面所使用PrintUnit這個Bean。
???????PrintUnit pu=(PrintUnit)xmld.readObject();//通過XMLDecoder中的readObject方法獲得PrintUnit對象。
如果獲取到了這個對象那么pu中將有它的值a=A11,b=B22,c=C33。整個過程最好放try
…catch中去,能夠捕獲一些如:文件不存在等異常。
???????從操作方式上看XMLDecoder似乎不比XStream差多少,同樣是可以通過ObjectInputStream獲取XML文件中的對象。它們的差異就是解析的方式不同,XMLDecoder是使用Java自帶的XML解析方式,而XStream則是可以自定義的,它可以使用多中方式進行解析。這些是我個人所發現的一些不同點。
?
???????XMLEncoder是通過一個輸出流將對象序列化并輸出為XML文件。它所需要的是一個輸出流及一個輸出方式。
?
???????XMLEncoder的實例:
?
???????String fileStr=”xstream.xml”;//定義一個輸入的目標文件。
???????ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(fileStr));//創建一個對象輸出流。
???????XMLEncoder xmle=new XMLEncoder(out);//創建一個XMLEncoder對象。
???????延用前面所使用PrintUnit這個Bean。
//創建并初始化PrintUnit對象。
PrintUnit pu=new PrintUnit();
pu.setA(“AAA”);
pu.setB(“BBB”);
pu.setC(“CCC”);
?
???????xmle.writeObject(pu);//使用XMLEncode的writeObject方法輸出pu
???????xmle.flush();//刷新
???????xmle.close();//關閉輸出流
?
???????從上面的代碼不難看出,使用XMLEncode方式將對象序列化并輸出也是很方便的,簡單調用writeObject方法能將普通Bean輸出為XML文件。
??????
???????XML文件的內容:
?
�_?<?xml?version="1.0"?encoding="UTF-8"?>
<java?version="1.5.0"?class="java.beans.XMLDecoder">
?<object?class="test.PrintUnit">
??<void?property="a">
???<string>AAA</string>
??</void>
??<void?property="b">
???<string>BBB</string>
??</void>
??<void?property="c">
???<string>CCC</string>
??</void>
?</object>
w???</java>
?
???????不知道是我哪里沒有處理,還是實際并不是像我想象的哪么簡單,使用XMLEncoder所輸出的XML文件中有一定的問題,雖然它很詳細,比起XStream所生成的更多,包括了XML和Java的版本看上去更像是個完整的XML文件,不過再細看它們兩生成的XML格式內容,完全不同,這個我想就是它們最大的區別。這讓我想到了很多內容:工作方式,解析器,轉換方式等。大家有沒發現在開始和結束都存在一些亂碼數據,難道在XMLEncoder輸出過程中或數據轉換中內容已經存在“臟”數據了?還是我所使用的輸出方式存在問題?哎…一個又一個問題出現了。我想我需要再進一步的研究和學習才能得到答案。
???????不過盡管有這個那個的問題,使用Java本身自帶的XML工具還是一樣很實用的,讀取和輸出一樣可用,操作也很靈活。因此我覺得在某些場合使用特定的工具可能會更好,利用XMLEncoder和XMLDecoder同樣可以解決一些問題。
?
?
XStream 有三個突出的優點:
不需要修改類,使用 XStream 就能直接序列化/逆序列化任何第三方類。
?
轉載于:https://blog.51cto.com/jianshusoft/760678
總結
以上是生活随笔為你收集整理的XML格式对象序列化(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MYSQL查看 table 表状态常用的
- 下一篇: 字符集编码问题研究