XStream知识汇总

官方网站:http://xstream.codehaus.org/index.html

【引1】

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

 

XML 序列化用处很多,包括对象持久化和数据传输。但是一些 XML 序列化技术实现起来可能很复杂。XStream 是一个轻量级的、简单易用的开放源代码 Java? 库,用于将 Java 对象序列化为 XML 或者再转换回来。了解如何设置 XStream,如何使用它序列化和逆序列化对象以及从 XML 配置文件读取配置属性。

使用 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 所示)。


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


    填写项目名称
  3. 单击 Finish 完成该任务(如 图 3 所示)。


    完成设置

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



新建的 Java 项目

添加 XStream 支持

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

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


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


    完成 XStream 支持的添加

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



添加的库




回页首

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



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



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








回页首


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

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

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



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








回页首

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

【引2】两分钟教程

创建能够序列化的类

  这是一组简单的类。XStream能把这些类的实例转换到XML或是转换回来。

 

public   class  Person { 

  private  String firstName;
  private  String lastName;
  private  PhoneNumber phonex;
  private  PhoneNumber fax;
// 构造函数或是其他方法 


public   class  PhoneNumber { 

  private   int  code;
  private   int  number; 

// 构造函数或是其他方法
}

 

  :注意到这些都是私有变量。XStream不关心变量的作用域。不需要getter或是setter方法。并且,XStream不限定需要默认的构造函数。

 

实例化XStream

使用XStream,简单实例化XStream类:

 

XStream xStream  =   new  XStream(); 

 

 你需要xstream-[version].jar and xpp3-[version].jar在classpath中。XPP3是一个非常快的XML拉式转换器工具。如果你不想包含这个依赖,你可以使用标准的JAXP DOM转换器来代替。

 

XStream xStream  =   new  XStream( new  DomDriver()); // 不需要XPP3库 


注:这个类的简单设计是为了实现通用操作的。为了实现更复杂的操作你可以选择自己创建出不同方式。

 

现在,为了使用XStream来更精简的输出XML,你可以为自定义的类创建别名到XML的元素名的映射。这是使用XStream唯一需要的映射的,甚至这个都是可选的。

 

xStream.alians( " person " ,Person. class ); 

 

:这是可选的一步。没有这步XStream也可以很好的起作用,但是XML元素的名字就会包含每个类的全称(包括包名),这将会使生成XML稍大。

 

序列号一个对象到XML

 让我们创建一个Person的实例并且填充它的变量域:

 

Person joe  =   new  Person( " Joe " , " Walnes " ); 

joe.setPhone( new  PhoneNumber( 123 , " 1234-456 " )); 

joe.setFax( new  PhoneNumber( 123 , " 9999-999 " )); 

 

现在转换到XML,你要做的是简单的调用XStream:

String xml  =  xstream.toXML(joe); 

 

生成的XML看上去像这样:

 

< person >
   < firstname > Joe </ firstname >
   < lastname > Walnes </ lastname >
   < phone >
     < code > 123 </ code >
     < number > 1234-456 </ number >
   </ phone >
   < fax >
     < code > 123 </ code >
     < number > 9999-999 </ number >
   </ fax >
</ person >  

 

非常简单,像创建XML一样。

 

从XML反序列化一个对象

 

从XML重新构造一个对象:

Person newJoe  =  (Person)xStream.fromXML(xml); 

 

XStream是多么的简单啊!

 

总结:

 

使用xStream.alias(String elementName, Class cls)为任何一个自定义类创建到类到元素的别名;

初始化XStream后,我们要将要转换的类注册到xstream中,告诉XStream,有哪些类要进行XML转换,注册采用以下的语句:

xstream.alias(“person”, Person.class);

xstream.alias(“phonenumber”, PhoneNumber.class);

当然,这一步不是必须的,如果不进行注册的话,XStream默认会在转换时,将对应类全限定名也加入XML文件中,如com.test.Person,这如果在数据量大的时候,会使生成的XML文件增大不少

使用xStream.toXML(Object obj)转换对象到XML;

使用xStream.fromXML(String xml)转换XML到对象;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值