这个简单的例子示范了如何使用 XStream 序列化/逆序列化对象,包括两个类:Writer 和 Reader。Writer 类使用 XStream API 把 Employee 类型的对象序列化为 XML 并存储到文件中(如 清单 1 所示)。
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 所示)。
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 对象的结构。
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; } } |