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

XML 序列化用处很多,包括对象持久化和数据传输。但是一些 XML 序列化技术实现起来可能很复杂。XStream 是一个轻量级的、简单易用的开放源代码 Java™ 库,用于将 Java 对象序列化为 XML 或者再转换回来。了解如何设置 XStream,如何使用它序列化和逆序列化对象以及从 XML 配置文件读取配置属性。
<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->

使用 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 项目
    使用 XStream 把 Java 对象序列化为 XML

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

    图 2. 填写项目名称
    使用 XStream 把 Java 对象序列化为 XML

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

    图 3. 完成设置
    使用 XStream 把 Java 对象序列化为 XML

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


图 4. 新建的 Java 项目
使用 XStream 把 Java 对象序列化为 XML

添加 XStream 支持

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

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

    图 5. 添加 XStream 库
    使用 XStream 把 Java 对象序列化为 XML

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

    图 6. 完成 XStream 支持的添加
    使用 XStream 把 Java 对象序列化为 XML

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


图 7. 添加的库
使用 XStream 把 Java 对象序列化为 XML

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


序列化对象

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


清单 1. Writer.java

使用 XStream 把 Java 对象序列化为 XMLpackagecom.samples;
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML
importjava.io.FileNotFoundException;
使用 XStream 把 Java 对象序列化为 XML
importjava.io.FileOutputStream;
使用 XStream 把 Java 对象序列化为 XML
importcom.thoughtworks.xstream.*;
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicclassWriter...{
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicstaticvoidmain(String[]args)...{
使用 XStream 把 Java 对象序列化为 XMLEmployeee
=newEmployee();
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML
//Setthepropertiesusingthesettermethods
使用 XStream 把 Java 对象序列化为 XML
//Note:Thiscanalsobedonewithaconstructor.
使用 XStream 把 Java 对象序列化为 XML
//SincewewanttoshowthatXStreamcanserialize
使用 XStream 把 Java 对象序列化为 XML
//evenwithoutaconstructor,thisapproachisused.
使用 XStream 把 Java 对象序列化为 XML
e.setName("Jack");
使用 XStream 把 Java 对象序列化为 XMLe.setDesignation(
"Manager");
使用 XStream 把 Java 对象序列化为 XMLe.setDepartment(
"Finance");
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML
//Serializetheobject
使用 XStream 把 Java 对象序列化为 XML
XStreamxs=newXStream();
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML
//Writetoafileinthefilesystem
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
try...{
使用 XStream 把 Java 对象序列化为 XMLFileOutputStreamfs
=newFileOutputStream("c:/temp/employeedata.txt");
使用 XStream 把 Java 对象序列化为 XMLxs.toXML(e,fs);
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML}
catch(FileNotFoundExceptione1)...{
使用 XStream 把 Java 对象序列化为 XMLe1.printStackTrace();
使用 XStream 把 Java 对象序列化为 XML}

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

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

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

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


清单 2. Reader.java

使用 XStream 把 Java 对象序列化为 XMLpackagecom.samples;
使用 XStream 把 Java 对象序列化为 XML
importjava.io.FileInputStream;
使用 XStream 把 Java 对象序列化为 XML
importjava.io.FileNotFoundException;
使用 XStream 把 Java 对象序列化为 XML
importcom.thoughtworks.xstream.*;
使用 XStream 把 Java 对象序列化为 XML
importcom.thoughtworks.xstream.io.xml.DomDriver;
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicclassReader...{
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicstaticvoidmain(String[]args)...{
使用 XStream 把 Java 对象序列化为 XMLXStreamxs
=newXStream(newDomDriver());
使用 XStream 把 Java 对象序列化为 XMLEmployeee
=newEmployee();
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
try...{
使用 XStream 把 Java 对象序列化为 XMLFileInputStreamfis
=newFileInputStream("c:/temp/employeedata.txt");
使用 XStream 把 Java 对象序列化为 XMLxs.fromXML(fis,e);
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML
//printthedatafromtheobjectthathasbeenread
使用 XStream 把 Java 对象序列化为 XML
System.out.println(e.toString());
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML}
catch(FileNotFoundExceptionex)...{
使用 XStream 把 Java 对象序列化为 XMLex.printStackTrace();
使用 XStream 把 Java 对象序列化为 XML}

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

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

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

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


清单 3. Employee.java

使用 XStream 把 Java 对象序列化为 XMLpackagecom.samples;
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicclassEmployee...{
使用 XStream 把 Java 对象序列化为 XML
privateStringname;
使用 XStream 把 Java 对象序列化为 XML
privateStringdesignation;
使用 XStream 把 Java 对象序列化为 XML
privateStringdepartment;
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicStringgetName()...{
使用 XStream 把 Java 对象序列化为 XML
returnname;
使用 XStream 把 Java 对象序列化为 XML}

使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicvoidsetName(Stringname)...{
使用 XStream 把 Java 对象序列化为 XML
this.name=name;
使用 XStream 把 Java 对象序列化为 XML}

使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicStringgetDesignation()...{
使用 XStream 把 Java 对象序列化为 XML
returndesignation;
使用 XStream 把 Java 对象序列化为 XML}

使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicvoidsetDesignation(Stringdesignation)...{
使用 XStream 把 Java 对象序列化为 XML
this.designation=designation;
使用 XStream 把 Java 对象序列化为 XML}

使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicStringgetDepartment()...{
使用 XStream 把 Java 对象序列化为 XML
returndepartment;
使用 XStream 把 Java 对象序列化为 XML}

使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicvoidsetDepartment(Stringdepartment)...{
使用 XStream 把 Java 对象序列化为 XML
this.department=department;
使用 XStream 把 Java 对象序列化为 XML}

使用 XStream 把 Java 对象序列化为 XML@Override
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicStringtoString()...{
使用 XStream 把 Java 对象序列化为 XML
return"Name:"+this.name+
使用 XStream 把 Java 对象序列化为 XML
" Designation:"+this.designation+
使用 XStream 把 Java 对象序列化为 XML
" Department:"+this.department;
使用 XStream 把 Java 对象序列化为 XML}

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

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

读取配置文件

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

多数应用程序都要用到一些属性。这些属性可能是要连接的数据源的名称或者日志文件的位置。配置文件最适合存储这类数据,从而在修改这些属性的时候不需要重新编译应用程序,应用程序维护起来也更容易。下面的例子说明如何在应用程序中使用 XStream 从 XML 配置文件中读取配置属性。

XML 数据绑定通常需要从 XML 文件生成 Java 对象。使用 XStream 省略了生成对象这个步骤。只需要编写一个 Java 类将类的字段映射到希望读取的 XML 的元素。这个例子使用的配置文件如 清单 4 所示。


清单 4. Config.xml

使用 XStream 把 Java 对象序列化为 XML<?xmlversion="1.0"encoding="UTF-8"?>
使用 XStream 把 Java 对象序列化为 XML
<config>
使用 XStream 把 Java 对象序列化为 XML
<datasource-name>IRIS</datasource-name>
使用 XStream 把 Java 对象序列化为 XML
<ipaddress>9.124.74.85</ipaddress>
使用 XStream 把 Java 对象序列化为 XML
<logfilename>DailyLogApplication.log</logfilename>
使用 XStream 把 Java 对象序列化为 XML
<appender>console</appender>
使用 XStream 把 Java 对象序列化为 XML
</config>
使用 XStream 把 Java 对象序列化为 XML

清单 5 显示的 ConfigReader 类读取该配置文件并将属性加载到 Java 对象中。


清单 5. ConfigReader.java

使用 XStream 把 Java 对象序列化为 XMLpackagecom.samples;
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML
importjava.io.FileInputStream;
使用 XStream 把 Java 对象序列化为 XML
importjava.io.FileNotFoundException;
使用 XStream 把 Java 对象序列化为 XML
importcom.thoughtworks.xstream.*;
使用 XStream 把 Java 对象序列化为 XML
importcom.thoughtworks.xstream.io.xml.DomDriver;
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicclassConfigReader...{
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XMLStringdatasourcename
=null;
使用 XStream 把 Java 对象序列化为 XMLStringipaddress
=null;
使用 XStream 把 Java 对象序列化为 XMLStringlogfilename
=null;
使用 XStream 把 Java 对象序列化为 XMLStringappender
=null;
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML@Override
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicStringtoString()...{
使用 XStream 把 Java 对象序列化为 XML
//Thismethodprintsoutthevaluesstoredinthemembervariables
使用 XStream 把 Java 对象序列化为 XML
return"DatasourceName:"+datasourcename+
使用 XStream 把 Java 对象序列化为 XML
" IPAddress:"+ipaddress+
使用 XStream 把 Java 对象序列化为 XML
" Logfilename:"+logfilename+
使用 XStream 把 Java 对象序列化为 XML
" Appender:"+appender;
使用 XStream 把 Java 对象序列化为 XML}

使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
/***//**
使用 XStream 把 Java 对象序列化为 XML*
@paramargs
使用 XStream 把 Java 对象序列化为 XML*
@throwsFileNotFoundException
使用 XStream 把 Java 对象序列化为 XML
*/

使用 XStream 把 Java 对象序列化为 XML使用 XStream 把 Java 对象序列化为 XML
publicstaticvoidmain(String[]args)throwsFileNotFoundException...{
使用 XStream 把 Java 对象序列化为 XMLXStreamxs
=newXStream(newDomDriver());
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XMLFileInputStreamfis
=newFileInputStream("c:/temp/Config.xml");
使用 XStream 把 Java 对象序列化为 XMLxs.aliasField(
"datasource-name",ConfigReader.class,"datasourcename");
使用 XStream 把 Java 对象序列化为 XMLxs.alias(
"config",ConfigReader.class);
使用 XStream 把 Java 对象序列化为 XMLConfigReaderr
=(ConfigReader)xs.fromXML(fis);
使用 XStream 把 Java 对象序列化为 XML
使用 XStream 把 Java 对象序列化为 XMLSystem.out.println(r.toString());
使用 XStream 把 Java 对象序列化为 XML}

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

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

结束语

创建和开发使用 XStream 的应用程序只需要简单的几个步骤。本文介绍如何使用 XStream 序列化/逆序列化 Java 对象和读取配置文件,通过 XStream 网站(教程链接参见 参考资料)可以进一步了解别名、注解和转换程序。别名和转换程序可以让您完全控制生成的 XML。

下载

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