使用 XStream 把 Java 对象序列化为 XML
来源:互联网 发布:如何起诉装修公司 知乎 编辑:程序博客网 时间:2024/06/07 00:08
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。
和其他序列化工具相比,XStream 有三个突出的特点:
- XStream 不关心序列化/逆序列化的类的字段的可见性。
- 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
- 序列化/逆序列化的类不需要有默认构造函数。
不需要修改类,使用 XStream 就能直接序列化/逆序列化任何第三方类。
设置开发环境
按照下列步骤下载和安装 XStream(下载链接参见 参考资料):
- 从 Eclipse 网站下载 Eclipse。安装的时候将其解压到选定的文件夹,本文中用 eclipse_home 表示。本文假定使用 Eclipse 3.3。
- 从 XStream 网站下载最新的 XStream 稳定版本。安装的时候解压到选定的文件夹,本文用 xstream_home 表示。假定使用的 XStream 版本是 1.2.2。
- 从 Sun 网站下载 Java Platform, Standard Edition (J2SE) 软件开发工具箱(SDK)。安装到选定的文件夹,本文用 java_home 表示。假定版本为 1.5.0_05。
序列化对象
这个简单的例子示范了如何使用 XStream 序列化/逆序列化对象,包括两个类:Writer
和 Reader
。Writer
类使用 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; }}
回页首
读取配置文件
多数应用程序都要用到一些属性。这些属性可能是要连接的数据源的名称或者日志文件的位置。配置文件最适合存储这类数据,从而在修改这些属性的时候不需要重新编译应用程序,应用程序维护起来也更容易。下面的例子说明如何在应用程序中使用 XStream 从 XML 配置文件中读取配置属性。
XML 数据绑定通常需要从 XML 文件生成 Java 对象。使用 XStream 省略了生成对象这个步骤。只需要编写一个 Java 类将类的字段映射到希望读取的 XML 的元素。这个例子使用的配置文件如清单 4 所示。
清单 4. Config.xml
<?xml version="1.0" encoding="UTF-8"?><config> <datasource-name>IRIS</datasource-name> <ipaddress>9.124.74.85</ipaddress> <logfilename>DailyLogApplication.log</logfilename> <appender>console</appender></config>
清单 5 显示的ConfigReader
类读取该配置文件并将属性加载到 Java 对象中。
清单 5. ConfigReader.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 ConfigReader { String datasourcename = null; String ipaddress = null; String logfilename = null; String appender = null; @Override public String toString() { // This method prints out the values stored in the member variables return "Datasource Name : "+datasourcename+ " \nIP Address : "+ipaddress+ " \nLogfilename : "+logfilename+ " \nAppender : "+appender; } /** * @param args * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException { XStream xs = new XStream(new DomDriver()); FileInputStream fis = new FileInputStream("c:/temp/Config.xml"); xs.aliasField("datasource-name", ConfigReader.class, "datasourcename"); xs.alias("config", ConfigReader.class); ConfigReader r = (ConfigReader)xs.fromXML(fis); System.out.println(r.toString()); }}
- 使用 XStream 把 Java 对象序列化为 XML
- 使用XStream把Java对象序列化为XML
- 使用 XStream 把 Java 对象序列化为 XML
- 使用XStream把Java 对象序列化为XML!!!
- 使用 XStream 把 Java 对象序列化为 XML
- 使用 XStream 把 Java 对象序列化为 XML
- 使用 XStream 把 Java 对象序列化为 XML
- 使用 XStream 把 Java 对象序列化为 XML
- 使用 XStream 把 Java 对象序列化为 XML(本文转载自http://www.ibm.com/developerworks/cn/xml/x-xstream/)
- Java使用XStream将集合类内容序列化为XML
- 使用 XStream 把 Java 对象序列化为 XML(本文转载自http://www.blogjava.net/zlkn2005/archive/2005/12/16/24240.html)
- Java 对象序列化为Json 或XML
- java对象序列化为xml格式
- 把对象序列化为xml格式和反序列化
- c# 对象序列化为XML
- 将对象序列化为XML
- java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例
- Java XStream把Java对象转换为xml
- 数据结构二叉树的先序中序后序遍历(递归方式)
- 在指定路径创建文件夹, 获取EXE文件的当前目录
- NSDate时间操作
- 设备坐标和逻辑坐标
- ssh ProxyCommand
- 使用 XStream 把 Java 对象序列化为 XML
- include与jsp:include与s:action与s:include与iframe用法汇总(转)
- 生成一个swf文件,Display list (下)
- 使用ASP.NET AJAX的注意事项
- Symbian编程与开发环境设置
- Silverlight.XNA(C#)跨平台3D游戏研发手记:(四)SLG无限自由之过场动画
- ASP.NET控件命名规则
- 生成一个swf文件,Display list(上)
- 单片机接收模块FIFO的写法