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

转载 2012年03月21日 15:34:54

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

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

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

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

设置开发环境

按照下列步骤下载和安装 XStream(下载链接参见 参考资料):

  1. 从 Eclipse 网站下载 Eclipse。安装的时候将其解压到选定的文件夹,本文中用 eclipse_home 表示。本文假定使用 Eclipse 3.3。
  2. 从 XStream 网站下载最新的 XStream 稳定版本。安装的时候解压到选定的文件夹,本文用 xstream_home 表示。假定使用的 XStream 版本是 1.2.2。
  3. 从 Sun 网站下载 Java Platform, Standard Edition (J2SE) 软件开发工具箱(SDK)。安装到选定的文件夹,本文用java_home 表示。假定版本为 1.5.0_05。

创建一个 Java 项目

要创建一个 Java 项目,需要选择 File > New > Project,然后按下列步骤操作:

  1. 选择 Java > Java Project > Next(如 图 1 所示)。 

    图 1. 新建 Java 项目
    新建 Java 项目 

  2. 填写项目名称并单击 Next(如 图 2 所示)。

    图 2. 填写项目名称
    填写项目名称 

  3. 单击 Finish 完成该任务(如 图 3 所示)。 

    图 3. 完成设置
    完成设置 

图 4 显示了新建的 Java 项目。


图 4. 新建的 Java 项目
新建的 Java 项目 

添加 XStream 支持

按照下列步骤向新建的项目添加 XStream 库:

  1. 在 Eclipse 的 Project Explorer 中选择新建的项目,从 Project 菜单中选择 Properties(如 图 5 所示)。 

    图 5. 添加 XStream 库
    添加 XStream 库 

  2. 单击 Add External JARs,从 xstream_home/lib 文件夹中选择 xstream-1.2.2.jar。
  3. 单击 OK 结束(如 图 6 所示)。 

    图 6. 完成 XStream 支持的添加
    完成 XStream 支持的添加 

图 7 显示了添加 XStream 支持后的项目。


图 7. 添加的库
添加的库 

序列化对象

这个简单的例子示范了如何使用 XStream 序列化/逆序列化对象,包括两个类:Writer 和 ReaderWriter 类使用 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;
 }
}

读取配置文件

读取完整的 XML 文件

下面的例子说明了如何读取一个简单的 XML 文件。要读取完整的 XML 文件可能需要编写自定义的转换程序。XStream “Converter Tutorial” 网站(参见 参考资料)提供了编写转化程序的教程。

多数应用程序都要用到一些属性。这些属性可能是要连接的数据源的名称或者日志文件的位置。配置文件最适合存储这类数据,从而在修改这些属性的时候不需要重新编译应用程序,应用程序维护起来也更容易。下面的例子说明如何在应用程序中使用 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 的应用程序只需要简单的几个步骤。本文介绍如何使用 XStream 序列化/逆序列化 Java 对象和读取配置文件,通过 XStream 网站(教程链接参见 参考资料)可以进一步了解别名、注解和转换程序。别名和转换程序可以让您完全控制生成的 XML。


下载

描述 名字 大小 下载方法
本文的 Java 源代码 x-xstreamcode.zip 3KB HTTP


相关文章推荐

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

使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 S...

使用 XStream 把 Java 对象序列化为 XML(本文转载自http://www.blogjava.net/zlkn2005/archive/2005/12/16/24240.html)

XStream   使用 XStream 的初衷   研究和使用 XStream 的原因是我在项目中的一个预研。在项目中需要应用到对 XML 文件的管理和配置,因此需要一个能够将对象保存为 X...

使用 XStream 把 Java 对象序列化为 XML(本文转载自http://www.ibm.com/developerworks/cn/xml/x-xstream/)

XStream两分钟教程(译) Posted on 2007-05-08 18:14 qiyadeng 阅读(17057) 评论(8)  编辑  收藏   两分钟教程   这是一个关于XSt...

使用XStream注解实现Java对象与XML互相转换的代码示例

一定要对XStream的注解有一定的认识,最起码要知道每个注解是什么意思!! 代码实现: 1.创建java对象 1.1分别创建Book和Books对象package com.xd.bean;im...

使用XStream实现Java对象与XML之间的快速互转

需求:如何实现Java对象与XML之间的快速互转? 要实现这个需求,解决方法太多了,今天为大家展示的是XStream,可能很多朋友已经知道这个工具。 下面来看看XStream如何使用。 第一步导...

使用 XStream 实现 Java 对象与 XML 的相互转换

1. 初始化要转为 XML 的数据: // 生成第一条地址数据; Address address1 = new Address(1, "地址一", "广东省XX市", "XX公司"); // 生成第...

使用XStream注解实现Java对象与XML互相转换的代码示例

本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例。     我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件。如:jdom、dom4...

使用XStream注解实现Java对象与XML互相转换的代码示例---转自:http://www.blogjava.net/bolo

本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例。     我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件。如:jdom、dom4...

使用XStream将Java对象和XML之间相互转换

xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换; xStream.autodetectAnnotations(true);...

java 使用XStream Java对象和XML之间的转换

XStream对象相当Java对象和XML之间的转换器,转换过程是双向的。创建XSteam对象的方式很简单,只需要new XStream()即可。 Java到xml,用toXML()方法。 Xml...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 XStream 把 Java 对象序列化为 XML
举报原因:
原因补充:

(最多只允许输入30个字)