xtream 示例介绍
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt271
1 xStream框架
xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换;
官网:
http://xstream.codehaus.org/
2 about xtream
xtream 是一个简单的工具包,用来把对象序列化成xml配置文件,并且也可以把xml反序化成对象。
4Features 功能特点
简单易用,不需要配置映射,速度快并且占用内存小,生成的xml配置文件很干净,不带额外无用信息,这样在反映序列化的时候容易读取。不需要修改序列化对象的类型。支持类图。与xmlapi 整合。详细的返回错误信息。可修改的输出 显示。
4 点型应用
传输:网络传输
持久化:生成的XML可以写到文件,做持久化。
配置:XML最常用的配置文件。
单元测试
5局限
If using the enhanced mode, XStream can re-instantiate classes that do not have a default constructor. However, if using a different JVM like an old JRockit version, a JDK 1.3 or you have restrictions because of a SecurityManager, a default constructor is required.
The enhanced mode is also necessary to restore final fields for any JDK < 1.5. This implies deserialization of instances of an inner class.
Auto-detection of annotations may cause race conditions. Preprocessing annotations is safe though.
6准备一个pojo对象
Java代码
- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
packagecom.entity;importjava.util.Date;bpublicclassStudent {privateintid;privateString name;privateString email;privateString address;privateBirthday birthday;privateDate registDate;publicDate getRegistDate() {returnregistDate;}publicvoidsetRegistDate(Date registDate) {this.registDate = registDate;}publicintgetId() {returnid;}publicvoidsetId(intid) {this.id = id;}publicString getName() {returnname;}publicvoidsetName(String name) {this.name = name;}publicString getEmail() {returnemail;}publicvoidsetEmail(String email) {this.email = email;}publicString getAddress() {returnaddress;}publicvoidsetAddress(String address) {this.address = address;}publicBirthday getBirthday() {returnbirthday;}publicvoidsetBirthday(Birthday birthday) {this.birthday = birthday;}// getter、setterpublicString toString() {returnthis.name +"#"+this.id +"#"+this.address +"#"+this.birthday +"#"+this.email;}}
7 bean 转成 xml
测试代码:
Java代码
- 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
packagecom.test;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.util.Date;importorg.junit.Before;importorg.junit.Test;importcom.entity.Birthday;importcom.entity.Student;importcom.thoughtworks.xstream.XStream;@SuppressWarnings("unchecked")publicclassXStreamTest {privateXStream xstream =null;privateObjectOutputStream out =null;privateObjectInputStream in =null;privateStudent bean =null;@Beforepublicvoidinit() {try{xstream =newXStream();bean = getTestStudent();// xstream = new XStream(new DomDriver()); // 需要xpp3 jar}catch(Exception e) {e.printStackTrace();}}publicstaticvoidmain(String[] args) {XStreamTest test =newXStreamTest();test.init();test.testWriteBean2XML_01();}publicfinalvoidfail(String string) {System.out.println(string);}publicfinalvoidfailRed(String string) {System.err.println(string);}/*** bean 2 XML* */@TestpublicvoidtestWriteBean2XML_01() {try{fail("------------Bean->XML------------");fail(xstream.toXML(bean));}catch(Exception e) {e.printStackTrace();}}/*** 类重命名后的XML* */@TestpublicvoidtestWriteBean2XML_02() {try{fail("-----------类重命名后的XML------------");// 类重命名xstream.alias("student", Student.class);xstream.aliasField("生日", Student.class,"birthday");xstream.aliasField("生日日期", Birthday.class,"birthday");fail(xstream.toXML(bean));}catch(Exception e) {e.printStackTrace();}}/*** 类重命名后的XML* */@TestpublicvoidtestWriteBean2XML_03() {try{fail("-----------属性重命名后的XML------------");// 属性重命名xstream.aliasField("邮件", Student.class,"email");fail(xstream.toXML(bean));}catch(Exception e) {e.printStackTrace();}}/*** 包重命名后的XML* */@TestpublicvoidtestWriteBean2XML_04() {try{fail("-----------包重命名后的XML------------");//包重命名xstream.aliasPackage("modile","com.entity");fail(xstream.toXML(bean));}catch(Exception e) {e.printStackTrace();}}/*** 构造数据* */privateStudent getTestStudent() {Student bean =newStudent();bean.setAddress("china");bean.setEmail("email");bean.setId(1);bean.setName("jack");Birthday day =newBirthday();day.setBirthday("2010-11-22");bean.setBirthday(day);bean.setRegistDate(newDate());returnbean;}}
测试结果:
------------Bean->XML------------
|
1
2
3
4
5
6
7
8
9
10
|
<com.entity.Student> <id>1</id> <name>jack</name> <email>email</email> <address>china</address> <birthday> <birthday>2010-11-22</birthday> </birthday> <registDate>2011-07-11 22:33:02.359 CST</registDate> </com.entity.Student> |
-----------类重命名后的XML------------
|
1
2
3
4
5
6
7
8
9
10
|
<student> <id>1</id> <name>jack</name> <email>email</email> <address>china</address> <生日> <生日日期>2010-11-22</生日日期> </生日> <registDate>2011-07-11 22:33:02.390 CST</registDate> </student> |
-----------属性重命名后的XML------------
|
1
2
3
4
5
6
7
8
9
10
|
<com.entity.Student> <id>1</id> <name>jack</name> <邮件>email</邮件> <address>china</address> <birthday> <birthday>2010-11-22</birthday> </birthday> <registDate>2011-07-11 22:33:02.406 CST</registDate> </com.entity.Student> |
-----------包重命名后的XML------------
|
1
2
3
4
5
6
7
8
9
10
|
<modile.Student> <id>1</id> <name>jack</name> <email>e</email> <address>china</address> <birthday> <birthday>2010-11-22</birthday> </birthday> <registDate>2011-07-11 22:33:02.406 CST</registDate> </modile.Student> |
8 List 2 XML
Java代码 ![]()
- 1234567
fail("------------Listg<Strudent>->XML------------");List<Student> list =newArrayList<Student>();list.add(bean);Student s1 = getTestStudent();s1.setId(2);list.add(s1);fail(xstream.toXML(list));
结果:
------------Listg<Strudent>->XML------------
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<list> <com.entity.Student> <id>1</id> <name>jack</name> <email>email</email> <address>china</address> <birthday> <birthday>2010-11-22</birthday> </birthday> <registDate>2011-07-11 22:47:08.0 CST</registDate> </com.entity.Student> <com.entity.Student> <id>2</id> <name>jack</name> <email>email</email> <address>china</address> <birthday> <birthday>2010-11-22</birthday> </birthday> <registDate>2011-07-11 22:47:08.0 CST</registDate> </com.entity.Student> </list>
|
xtream 示例介绍的更多相关文章
- ASP.NET Web API 开篇示例介绍
ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...
- jQuery中$.fn的用法示例介绍
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效,下面有个不错的示例,喜欢的朋友可以参考下 如扩展$.fn.abc(),即$.fn.abc()是对jquery ...
- HTML5标签与HTML4标签的区别示例介绍_html5教程技巧
(1)概念的变化: HTML5专注内容与结构,而不专注的表现 <header> <hgroup>导航相关数据</hgroup> </header> &l ...
- CSS鼠标响应事件经过、移动、点击示例介绍
本文为大家介绍下CSS 鼠标响应事件:鼠标经过CSS.鼠标移动CSS.鼠标点击CSS以及示例,喜欢的朋友可以参考下 几种鼠标触发CSS事件. 说明: onMouseDown 按下鼠标时触发 onM ...
- Hadoop2源码分析-YARN RPC 示例介绍
1.概述 之前在<Hadoop2源码分析-RPC探索实战>一文当中介绍了Hadoop的RPC机制,今天给大家分享关于YARN的RPC的机制.下面是今天的分享目录: YARN的RPC介绍 Y ...
- 【转】javascript 中that的含义示例介绍
var that = this;,这代表什么意思呢?this代表的是当前对象,var that=this就是将当前的this对象复制一份到that变量中,下面为大家介绍这样做有什么意义 你可能会发现别 ...
- 两个示例介绍JavaScript的闭包
JavaScript的闭包有两个用途:一个是访问函数内部的变量:另一个是让变量的值在作用域内保持不变.函数是JavaScript 中唯一有作用域的对象,因此JavaScript的闭包依赖于函数实现,下 ...
- LightningChart运行互动示例介绍
LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点. LightningChart包括广泛的2D,高级3D,Polar,Smith,3D ...
- jQuery学习之prop和attr的区别示例介绍
1..prop( propertyName ) 获取匹配集合中第一个元素的Property的值 2. .prop( propertyName, value ) .prop( map ) .prop( ...
随机推荐
- storm从入门到放弃(一),storm介绍
背景:目前就职于国内最大的IT咨询公司,恰巧又是毕业季,所在部门招了100多个应届毕业生,本人要跟部门新人进行为期一个月的大数据入职培训,特此将整理的文档分享出来. 原文和作者一起讨论:http:// ...
- 接口工具-POSTMAN
前端的一项总要工作就是测试接口,当然这也可能是你们后台人员做的.不管怎样,都需要测试接口,那么就来介绍一款谷歌浏览器接口测试插件,postman.首先你要去谷歌的应用商店,搜索这个插件,(需要FQ), ...
- Java中实现十进制数转换为二进制的三种思路
Java中实现十进制数转换为二进制 第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒 ...
- Xamarin.Forms(二) 返回页面的数据刷新
这几天在做一个课程表的小程序,遇到了这样一个问题: app打开便是课程表的页面,如果课程表页面没有数据的话需要跳转到同步课表页面模拟登陆教务管理系统获取课表,并显示在课程表页面,这样就需要从同步课表页 ...
- mysql获取当前时间,前一天,后一天
负责的项目中,使用的是mysql数据库,页面上要显示当天所注册人数的数量,获取当前的年月日,我使用的是 CURDATE(), 错误的sql语句 eg:SELECT COUNT(*) FROM USER ...
- [JLOI2013]删除物品 树状数组
当时考试时间剩下太短了然后就挂掉了..其实是个简单的数据结构. 话说一看最小还以为是动规呢.. 将两堆头对头排.比如样例就是 541|273 因为是必须有优先级次序,依次拿的话,看优先级大小相邻的两个 ...
- 米扑代理示例(mimvp-proxy-demo)
米扑代理示例(mimvp-proxy-demo) 米扑代理示例(mimvp-proxy-demo)聚合了多种编程语言使用代理IP,由北京米扑科技有限公司(mimvp.com)原创分享. 米扑代理示例, ...
- Ubuntu16.04LTS 环境下编译安装Xen
一.编译安装xen4.6过程 操作系统使用ubuntu16.04,通过下载xen4.6的源代码并编译安装来创建xen4.6环境. 一.依赖包的安装 sudo apt-get install gcc m ...
- innodb和myisam存储引擎插入速度
--innodb和myisam存储引擎插入速度 ------------------------------------2014/05/21 MySQL 5.6 全部默认设置,插入数据9999条,性能 ...
- Python实现登录接口
要求: 输入用户名和密码 认证成功,显示欢迎信息 用户名3次输入错误后,退出程序 密码3次输入错误后,锁定用户名 Readme: UserList.txt 是存放用户名和密码的文件,格式为:usern ...