使用 XStream 把 Java 对象序列化为 XML

使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。

和其他序列化工具相比,XStream 有三个突出的特点:

  1. XStream 不关心序列化/逆序列化的类的字段的可见性。
  2. 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
  3. 序列化/逆序列化的类不需要有默认构造函数。

不需要修改类,使用 XStream 就能直接序列化/逆序列化任何第三方类。

需要下载 xstream-1.2.2.jar。

序列化对象

这个简单的例子示范了如何使用 XStream 序列化/逆序列化对象,包括两个类:WriterReaderWriter 类使用 XStream API 把 Employee 类型的对象序列化为 XML 并存储到文件中(如 清单 1 所示)。


清单 1. Writer.java

                
package com.samples;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.thoughtworks.xstream.*;

public class Writer {

 public static void main(String[] args) {
 Employee e = new Employee();

 //Set the properties using the setter methods
 //Note: This can also be done with a constructor.
 //Since we want to show that XStream can serialize
 //even without a constructor, this approach is used.
 e.setName("Jack");
 e.setDesignation("Manager");
 e.setDepartment("Finance");

 //Serialize the object
 XStream xs = new XStream();

 //Write to a file in the file system
 try {
 FileOutputStream fs = new FileOutputStream("c:/temp/employeedata.txt");
 xs.toXML(e, fs);
 } catch (FileNotFoundException e1) {
 e1.printStackTrace();
 }
 }
}

Reader 类读取该文件,逆序列化 XML 并把数据装入 Java 对象(如 清单 2 所示)。


清单 2. Reader.java

                
package com.samples;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class Reader {

 public static void main(String[] args) {
 XStream xs = new XStream(new DomDriver());
 Employee e = new Employee();

 try {
 FileInputStream fis = new FileInputStream("c:/temp/employeedata.txt");
 xs.fromXML(fis, e);

 //print the data from the object that has been read
 System.out.println(e.toString());

 } catch (FileNotFoundException ex) {
 ex.printStackTrace();
 }

 }
}

清单 3 显示了 Employee 对象的结构。


清单 3. Employee.java

                

package com.samples;

public class Employee {
 private String name;
 private String designation;
 private String department;

 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getDesignation() {
 return designation;
 }
 public void setDesignation(String designation) {
 this.designation = designation;
 }
 public String getDepartment() {
 return department;
 }
 public void setDepartment(String department) {
 this.department = department;
 }
 @Override
 public String toString() {
 return "Name : "+this.name+
 "\nDesignation : "+this.designation+
 "\nDepartment : "+this.department;
 }
}

猜你喜欢

转载自xinghaifeng2006.iteye.com/blog/1489134
今日推荐