1. 程式人生 > >使用XStream是實現XML與Java對象的轉換(5)--Object Stream

使用XStream是實現XML與Java對象的轉換(5)--Object Stream

控制 () oid dex 關閉 ava -o setname otf

八,Object Stream

之前的例子我們都是直接輸出Xml成為String類型或者從String中獲得並解析Xml,現在我們要處理輸入流和輸出流!

1,輸出流(ObjectOutputStream)

輸出流測試程序如下:

Java代碼
  1. package cn.tjpu.zhw.xml.xstream5;
  2. import java.io.IOException;
  3. import java.io.ObjectOutputStream;
  4. import com.thoughtworks.xstream.XStream;
  5. public class OutMain {
  6. public static void main(String[] args) throws IOException {
  7. //創建XStream對象
  8. XStream xstream = new XStream();
  9. /*******1,序列化單個對象*******/
  10. System.out.println("*******1,序列化單個對象*******");
  11. xstream.toXML(new Person("張三"), System.out);
  12. System.out.println();
  13. System.out.println();
  14. /*******2,序列化一組對象*******/
  15. System.out.println("*******2,序列化一組對象*******");
  16. //將格式化後的xml輸出到System.out中,root是根節點
  17. ObjectOutputStream oos = xstream.createObjectOutputStream(System.out,"root");
  18. oos.writeObject(new Person("張三"));
  19. oos.writeObject(new Person("李四"));
  20. oos.writeObject(new Integer(1));
  21. oos.writeObject(2);
  22. oos.writeObject(new Double(3));
  23. oos.writeObject(4d);
  24. oos.writeObject(‘c‘);
  25. oos.writeObject("這是一堆字符串!");
  26. //一定要關閉流
  27. oos.close();
  28. }
  29. }
  30. class Person {
  31. public Person(String name){
  32. this.name = name;
  33. }
  34. private String name;
  35. public String getName() {
  36. return name;
  37. }
  38. public void setName(String name) {
  39. this.name = name;
  40. }
  41. public String toString() {
  42. return "Person對象的name="+getName();
  43. }
  44. }

運行結果:

Java代碼
  1. *******1,序列化單個對象*******
  2. <cn.tjpu.zhw.xml.xstream5.Person>
  3. <name>張三</name>
  4. </cn.tjpu.zhw.xml.xstream5.Person>
  5. *******2,序列化一組對象*******
  6. <root>
  7. <cn.tjpu.zhw.xml.xstream5.Person>
  8. <name>張三</name>
  9. </cn.tjpu.zhw.xml.xstream5.Person>
  10. <cn.tjpu.zhw.xml.xstream5.Person>
  11. <name>李四</name>
  12. </cn.tjpu.zhw.xml.xstream5.Person>
  13. <int>1</int>
  14. <int>2</int>
  15. <double>3.0</double>
  16. <double>4.0</double>
  17. <char>c</char>
  18. <string>這是一堆字符串!</string>
  19. </root>

上面兩個例子都是直接使用System.out,將XML輸出到控制臺。其實我們可以將其替換成我們喜歡的任何輸出流,比如FileWriter等。

2,輸入流(ObjectInputStream)

將如下內容寫入D:/temp1.xml文件:

Xml代碼
  1. <cn.tjpu.zhw.xml.xstream5.Person>
  2. <name>張三</name>
  3. </cn.tjpu.zhw.xml.xstream5.Person>

將如下內容寫入D:/temp2.xml文件:

Xml代碼
  1. <root>
  2. <cn.tjpu.zhw.xml.xstream5.Person>
  3. <name>張三</name>
  4. </cn.tjpu.zhw.xml.xstream5.Person>
  5. <cn.tjpu.zhw.xml.xstream5.Person>
  6. <name>李四</name>
  7. </cn.tjpu.zhw.xml.xstream5.Person>
  8. <int>1</int>
  9. <int>2</int>
  10. <double>3.0</double>
  11. <double>4.0</double>
  12. <char>c</char>
  13. <string>這是一堆字符串!</string>
  14. </root>

輸入流測試程序如下:

Java代碼
  1. package cn.tjpu.zhw.xml.xstream5;
  2. import java.io.EOFException;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.io.ObjectInputStream;
  7. import com.thoughtworks.xstream.XStream;
  8. public class InMain {
  9. public static void main(String[] args) throws IOException, ClassNotFoundException {
  10. //創建XStream對象
  11. XStream xstream = new XStream();
  12. /*******1,反序列化一個對象*******/
  13. FileReader reader1 = new FileReader(new File("D:/temp1.xml"));
  14. Person pp = (Person)xstream.fromXML(reader1);
  15. System.out.println("*******1,反序列化一個對象*******");
  16. System.out.println("pp="+pp);
  17. System.out.println();
  18. System.out.println();
  19. /*******1,反序列化一組對象*******/
  20. FileReader reader2 = new FileReader(new File("D:/temp2.xml"));
  21. ObjectInputStream ois = xstream.createObjectInputStream(reader2);
  22. Person p1 = (Person)ois.readObject();
  23. System.out.println("p1="+p1);
  24. Person p2 = (Person)ois.readObject();
  25. System.out.println("p2="+p2);
  26. int i1 = (Integer)ois.readObject();
  27. System.out.println("i1="+i1);
  28. int i2 = (Integer)ois.readObject();
  29. System.out.println("i2="+i2);
  30. double d1 = (Double)ois.readObject();
  31. System.out.println("d1="+d1);
  32. double d2 = (Double)ois.readObject();
  33. System.out.println("d2="+d2);
  34. char ch = (Character)ois.readObject();
  35. System.out.println("ch="+ch);
  36. String str = (String)ois.readObject();
  37. System.out.println("str="+str);
  38. System.out.println("******異常捕獲******");
  39. //發生異常
  40. try {
  41. ois.readObject();
  42. } catch (EOFException e) {
  43. System.out.println("因為已經沒有數據了,再次讀取時,就會發生EOFException異常");
  44. }
  45. }
  46. }

運行結果:

Java代碼
  1. *******1,反序列化一個對象*******
  2. pp=Person對象的name=張三
  3. p1=Person對象的name=張三
  4. p2=Person對象的name=李四
  5. i1=1
  6. i2=2
  7. d1=3.0
  8. d2=4.0
  9. ch=c
  10. str=這是一堆字符串!
  11. ******異常捕獲******
  12. 因為已經沒有數據了,再次讀取時,就會發生EOFException異常

使用XStream是實現XML與Java對象的轉換(5)--Object Stream