读书人

Xstream入门引见

发布时间: 2012-08-25 10:06:20 作者: rapoo

Xstream入门介绍

?开源项目Xstream简介 ---用于序列化对象与XML对象之间的相互转换

?

????? 开源项目Xstream简介

????? 目录

??????? 项目简介???? 4
??????? 典型的应用场合???? 5
??????? 系统架构分析???? 5
??????? 实例讲解???? 6
??????? 创建需要序列化的对象类???? 6
??????? 初始化XStream类???? 9
??????? 注册需要转换的类的别名???? 10
??????? 将对象序列化为XML文档???? 10
??????? 从XML文件反序列化成对象???? 11
??????? 结束语???? 11
??????? 参考资料???? 11

?

?项目简介

????? 开源项目XStream是一套简单实用的类库,用于序列化对象与XML对象之间的相互转换。本文以XStream
1.1.2版进行说明,它具有以下几个特点:

??????? 灵活易用:在更高的层次上提供了简单、灵活、易用的统一接口,用户无需了解项目的底层细节
??????? 无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操作
??????? 高速稳定:设计时力求达到的最重要的指标是解析速度快、占用内存少,以使之能够适用于大的对象处理或是对信息吞吐量要求高的系统
??????? 清晰易懂:项目采用reflection机制得到无冗余信息的XML文件。所生成的XML文件较本地Java序列化产物更简洁,格式更清晰,更便于用户阅读

??????? 无需修改:完全序列化包括private和final类型在内的全部内部字段。支持非公有类和内部类,类可以没有缺省的构造函数
??????? 易于集成:通过实现特定的接口,XStream可以直接与其它任何树型结构进行序列化与反序列化操作(而不仅仅是XML格式)
??????? 灵活转换:转换策略是可以定制的,允许用户自定义特殊类型的对象如何以XML格式存储。
??????? 错误处理:由于XML资料不合法而造成异常时,会提供详细地诊断信息帮助处理问题。

?

典型的应用场合

????? XStream主要应用于以下场合:

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

?

XStream系统架构分析

????? XStream的架构主要由四部分组成:

?????????

?Converters(转换器)??

?????? ?当XStream遇到需要轮换的对象时,它会委派给合适的转换器实现,XStream为通用类型提供了多种转换器实现,包括基本数据类型、String、Collections、Arrays、null、Date,等等。XStream提供了缺省的转换器,当需要转换的数据对象没有匹配的转换器时会使用。是通过反射机制自动完成对对象内所有字段的映射。

?

IO(输入/输出)
????? XStream是通过接口HierarchicalStramWriter和HierarchialStreamReader从底层XML数据中抽象而来的,上面的接口分别用于序列化和反序列化操作。
????? 该特性使得XStream可以直接使用XML解析类从数据流中读取数据,或者是直接从已经存在的结构中提取数据(比如DOM)。如果XStream所操作的XML数据已经部分被其它XML解析类处理过了(比如SOAP类的实例),这样就可以避免在我们这一层的再次解析操作。

?

Context(上下文引用)??????????
????? 在XStream序列化或反序列化对象时,它会创建两个类MarshallingContext和UnmarshallingContext,由它们来处理数据,以及委派合适的转换器。??????????
????? XStream提供了三对上下文的缺省实现,它们之间有着细微的差别。缺省值可以通过方法XStream.setMode()来改变,需要传递下面参数中的一个:????????

??????? ? XStream.XPATH_REFERENCES:? (缺省的)通过XPath引用来标识重复的引用。这样产生的XML具有最小的混乱性。
????????? XStream.ID_REFERENCES: 使用ID引用来标识重复的引用。在一些场合,比如使用手写XML时,这样将会更易于操作.

????????? XStream.NO_REFERENCES:? 这种情况将失去对图形对象的支持,仅把对象看作为树型结构。重复的引用被视作两个不同的对象,循环引用会导致异常产生。相对于上面两种模式,这种模式速度会更快,占用内存会更
?????????
Facade(统一入口)
????????? 主要类XStream用作所有项目的入口点。它将上面所提及的重要组件集成在一起,提供更简单易用的API操作。

?????

?

实例讲解

????? 下面我们通过一个简单的例子来了解XStream是如何工作的。
????? 创建需要序列化的对象类

?

<person>  <firstName>Bill</firstName>  <lastName>Gates</lastName>  <faxNumber>    <phoneId>101</phoneId>    <phoneNumber>83501194</phoneNumber>  </faxNumber>  <mobileNumber>    <phoneId>102</phoneId>    <phoneNumber>13686447788</phoneNumber>  </mobileNumber></person>------------Bill

?

?

转载:http://www.360doc.com/content/10/1117/22/4671279_70275332.shtml

1 楼 chenhongwei0924 2011-03-02 谢谢分享..................... 2 楼 tunxizxh 2011-03-31 学习了,不错!

读书人网 >软件架构设计

热点推荐