您的位置:首页 > 其它

开源框架xstream

2015-08-31 16:58 351 查看

一、作用

xstream用于序列化对象与XML对象之间的相互转换。


二、特点

(1)灵活易用:在更高的层次上提供了简单、灵活、易用的统一接口,用户无需了解项目的 底层细节 无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操作

(2)高速稳定:设计时力求达到的最重要的指标是解析速度快、占用内存少,以使之能够适 用于大的对象处理或是对信息吞吐量要求高的系统

(3)清晰易懂:项目采用reflection机制得到无冗余信息的XML文件。所生成 的XML文件较本地Java序列化产物更简洁,格式更清晰,更便于用户阅读

(4) 无需修改:完全序列化包括private和final类型在内的全部内部字段。支 持非公有类和内部类,类可以没有缺省的构造函数

(5)易于集成:通过实现特定的接口,XStream可以直接与其它任何树型结构进行序列化与反序 列化操作(而不仅仅是XML格式)

(6) 灵活转换:转换策略是可以定制的,允许用户自定义特殊类型的对象如何以XML格式 存储。

(7)错误处理:由于XML资料不合法而造成异常时,会提供详细地诊断信息帮助处理问题。

三、典型的应用场合

:数据对象的持久化 数据交换 配置文件

四:使用步骤

(1)创建需要序列化的对象类

person类。

public class Person
{
public Person(String fn, String ln, PhoneNumber faxn, PhoneNumber mobilen)
{
this.firstName = fn;
this.lastName = ln;
this.faxNumber = faxn;
this.mobileNumber = mobilen;
}
public Person(String fn, String ln)
{
this.firstName = fn;
this.lastName = ln;
}
private String firstName;
private String lastName;
private PhoneNumber faxNumber;
private PhoneNumber mobileNumber;
public PhoneNumber getFaxNumber()
{
return faxNumber;
}
public void setFaxNumber(PhoneNumber faxNumber)
{
this.faxNumber = faxNumber;
}
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
public PhoneNumber getMobileNumber()
{
return mobileNumber;
}
public void setMobileNumber(PhoneNumber mobileNumber)
{
this.mobileNumber = mobileNumber;
}
}
public class PhoneNumber
{
private int phoneId;
private String phoneNumber;
public PhoneNumber(int phoneId, String phoneNumber)
{
super();
this.phoneId = phoneId;
this.phoneNumber = phoneNumber;
}
public String getPhoneNumber()
{
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber)
{
this.phoneNumber = phoneNumber;
}
public int getPhoneId()
{
return phoneId;
}
public void setPhoneId(int phoneId)
{
this.phoneId = phoneId;
}
}


注意:这 里定义的属性都为private,XStream没有强制规定属性的可见性,默认情况下所有属性都会进行转换;虽然XStream不强制要求你必须要有 setter和getter方法,也不要求你要有一个默认的类构造方法,但是在实际应用时,这些还是必须的,因为你在程序中需要为对象设置属性,需要构造 对象,如果没有这些方法程序是不能编译通过的。

(2)、初始化XStream类

1、//使用XPP3库(默认情况下,XStream会 采用Xpp3库,XPP3是一种运行效率非常高的XML全解析实现)

XStream xstream = new XStream();


2、//不使用XPP3库(使用一个标准的JAXP DOM解析器)


XStream xstream = new XStream(new DomDriver());


此xstream实例,为线程安全的,可以供多个线程进行调用,共享使用。

(3)注册需要转换的类的别名

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


这一步不是必须的,为了使XStream输 出的XML文件更简练,我们要为需要转换的用户类设置别名,这些明会在转换过程中用于结点设置,如果不进行注册的话,XStream默认会在转换时,将用户类的全限定名称加入到XML文件中,如com.test.Person,如果在数 据量较大的时候,生成的XML文件会增大不少。


(4)生成对象

//生成Person对象,并注册属性
Person joe = new Person('Bill', 'Gates');
joe.setFaxNumber(new PhoneNumber(101, '83501194'));
joe.setMobileNumber(new PhoneNumber(102, '13686447788'));


(5)将生成的对象序列化

String xmls = xstream.toXML(joe);


(6)从XML文件反序列化成对象

Person newJoe = (Person)xstream.fromXML(xmls);


这篇文章是根据大神的整理的。链接在此:

http://www.360doc.com/content/07/0123/18/11192_342019.shtml

这个版本是针对xstream1.1的。版本较低。后面我会更新的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  开源框架