XStream使用文档

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

XStream使用文档第1页共33页XStream使用文档作者:胡少锋Email:hsf@21cn.com2011年11月XStream使用文档第2页共33页1基本介绍1.1前言XStream是一个轻量级的、简单易用的开放源代码Java库,用于将Java对象序列化为XML或者再转换回来。而且XStream还能将java对象转成其它格式,比如JSon。官方上的XStream特点:使用简单不需要配置映射速度快,占用内存小生成的XML文件简洁不需要修改序列化对象的类型支持类嵌套详细的错误日志可转成其它格式XStream相比其它框架有如下的优点:XStream不关心序列化/逆序列化的类的字段的可见性。序列化/逆序列化类的字段不需要getter和setter方法。序列化/逆序列化的类不需要有默认构造函数。2安装和使用2.1下载XStream的网站http://xstream.codehaus.org/download.html上面可以下载到各种版本。目前用最新版本是1.4.1,下载这个版本即可。XStream使用文档第3页共33页2.2安装XStream的安装方法比较简单,将xstream-1.4.1.jar以及kxml2-2.3.0.jar放置到类路径下面即可使用。如下图所示:3开始一个例子3.1新建一个空的javaproject工程通过eclipse向导新建一个JavaProject工程,并将上面提的两个类添加到类路径下。工程如下:3.2编写Java后台类,代码如下新建一个cn的package,然后在cn下面新建两个Java类,Person和PhoneNumber,代码分别如下:Person.javapackagecn;publicclassPerson{XStream使用文档第4页共33页privateStringfirstname;privateStringlastname;privatePhoneNumberphone;privatePhoneNumberfax;publicPerson(StringfirstName,StringlastName){this.firstname=firstName;this.lastname=lastName;}publicStringgetFirstname(){returnfirstname;}publicvoidsetFirstname(Stringfirstname){this.firstname=firstname;}publicStringgetLastname(){returnlastname;}publicvoidsetLastname(Stringlastname){this.lastname=lastname;}publicPhoneNumbergetPhone(){returnphone;}publicvoidsetPhone(PhoneNumberphone){this.phone=phone;}XStream使用文档第5页共33页publicPhoneNumbergetFax(){returnfax;}publicvoidsetFax(PhoneNumberfax){this.fax=fax;}}PhoneNumber.javapackagecn;publicclassPhoneNumber{privateintcode;privateStringnumber;publicPhoneNumber(intcode,Stringnumber){this.code=code;this.number=number;}publicintgetCode(){returncode;}publicvoidsetCode(intcode){this.code=code;}publicStringgetNumber(){returnnumber;}publicvoidsetNumber(Stringnumber){XStream使用文档第6页共33页this.number=number;}}以上是两个很普通的Java对象。下面将写测试代码,将一个Person对象转成xml;然后再从xml转成Java对象。在cn包下面建立一个Main.java,代码如下:packagecn;importcom.thoughtworks.xstream.XStream;publicclassMain{/***@paramargs*/publicstaticvoidmain(String[]args){XStreamxstream=newXStream();xstream.alias(person,Person.class);xstream.alias(phonenumber,PhoneNumber.class);Personjoe=newPerson(Joe,Walnes);joe.setPhone(newPhoneNumber(123,1234-456));joe.setFax(newPhoneNumber(123,9999-999));Stringxml=xstream.toXML(joe);System.out.println(xml);PersonnewJoe=(Person)xstream.fromXML(xml);System.out.println(newJoe.getFirstname());}}XStream使用文档第7页共33页3.3运行测试类运行上面的Main.java类,输出结果如下:3.4代码解析下面主要对Main.java中的main方法进行详细地解析.XStreamxstream=newXStream();直接实例化一个XStream对象,不用任何参数。这个时候XSteam内部会使用KXml2的解析工具。也就是上面添加的kxml2-2.3.0.jar包。如果不需要使用这个包的话,可以用JAXP的包等。例如:XStreamxstream=newXStream(newDomDriver());XStreamxstream=newXStream(newStaxDriver());继续下面的代码:xstream.alias(person,Person.class);xstream.alias(phonenumber,PhoneNumber.class);这两句表示对于xml中的每个结点,所映射的Java类。也就是person结点映射到了Person类;而phonenumber则映射到了PhoneNumber类。下面是实例化对象之类的,比较简单,我们跳过去不将。直接进入:Stringxml=xstream.toXML(joe);这个就是核心所在,即将一个java对象转成了xml。XStream使用文档第8页共33页继续下面的代码:PersonnewJoe=(Person)xstream.fromXML(xml);这个也是核心所在,将一个xml转成java对象。4Alias机制XStream的Alias功能是很强大的,也是XStream开发中不可或缺的一个重点功能,下面将通过一些实例来讲解如何应用Alias机制4.1默认情况,不使用Alias4.1.1新建相关的java对象类分别新建下面的类packagecom.thoughtworks.xstream;importjava.util.ArrayList;importjava.util.List;publicclassBlog{privateAuthorwriter;privateListentries=newArrayList();publicBlog(Authorwriter){this.writer=writer;}publicvoidadd(Entryentry){entries.add(entry);}publicListgetContent(){returnentries;}}XStream使用文档第9页共33页packagecom.thoughtworks.xstream;publicclassAuthor{privateStringname;publicAuthor(Stringname){this.name=name;}publicStringgetName(){returnname;}}packagecom.thoughtworks.xstream;publicclassEntry{privateStringtitle;privateStringdescription;publicEntry(Stringtitle,Stringdescription){this.title=title;this.description=description;}}4.1.2建立测试代码如下:packagecom.thoughtworks.xstream;publicclassMain{XStream使用文档第10页共33页publicstaticvoidmain(String[]args){BlogteamBlog=newBlog(newAuthor(GuilhermeSilveira));teamBlog.add(newEntry(first,Myfirstblogentry.));teamBlog.add(newEntry(tutorial,Todaywehavedevelopedanicealiastutorial.Tellyourfriends!NOW!));XStreamxstream=newXStream();System.out.println(xstream.toXML(teamBlog));}}运行这个主函数,输出结果如下:com.thoughtworks.xstream.BlogwriternameGuilhermeSilveira/name/writerentriescom.thoughtworks.xstream.Entrytitlefirst/titledescriptionMyfirstblogentry./description/com.thoughtworks.xstream.Entrycom.thoughtworks.xstream.Entrytitletutorial/titledescriptionTodaywehavedevelopedanicealiastutorial.Tellyourfriends!NOW!/description/com.thoughtworks.xstream.Entry/entries/com.thoughtworks.xstream.BlogXStream使用文档第11页共33页4.1.3分析从这个例子看到,如果没有使用任何Alias的话,输出的XML中包含了类的全路径,包含package和class的名称。这一般来说,不是我们想要的结果,可能我们想要的结果是如下:blogwriternameGuilhermeSilveira/name/writerentriesentrytitlefirst/titledescriptionMyfirstblogentry./description/entryentrytitletutorial/titledescriptionTodaywehavedevelopedanicealiastutorial.Tellyourfriends!NOW!/description/entry/entries/blog4.2对class进行alias修改上面的主函数,增加alias,如下:publicstaticvoidmain(String[]args){BlogteamBlog=newBlog(newAuthor(GuilhermeSilvei

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功