- 浏览: 921611 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- J2EE (9)
- Spring (11)
- Hibernate (11)
- Struts (5)
- opensource (19)
- Hadoop (28)
- 架构设计 (8)
- 企业应用 (10)
- SNMP (8)
- SSO (4)
- webservice (11)
- RPC (2)
- 编程语言 (0)
- Java (30)
- Javascript (5)
- NoSQL (11)
- 数据库 (0)
- oracle (8)
- MySQL (3)
- web (1)
- Android (2)
- Linux (15)
- 软件工具 (15)
- 项目构建 (11)
- 测试工具 (2)
- Exception (19)
- 杂谈 (4)
- Groovy (5)
- Nodejs (1)
- MacOSX (4)
最新评论
-
fighhin:
decode(BinaryBitmap,java.util.M ...
条形码/二维码之开源利器ZXing图文介绍 -
u013489005:
追问:楼主,请问有中文文档么?我的邮箱是frankgray@s ...
Java表达式计算引擎:Expr4J -
u013489005:
感谢博主 需要引入的包是import java.io.*;im ...
Java表达式计算引擎:Expr4J -
calosteward:
感谢楼主分享。。 Zxing 我听说过的。__________ ...
条形码/二维码之开源利器ZXing图文介绍 -
u013810758:
judasqiqi 写道感谢楼主!想请问楼主一下这个生成的图片 ...
Java实现二维码QRCode的编码和解码
blog迁移至:http://www.micmiu.com
XStream是一个简单的类库,可以序列化对象到xml,还可以将xml还原为对象。
XStream官网:http://xstream.codehaus.org/
附件提供XStream和xpp3相关的jar下载:
xstream-1.2.2.jar
xpp3-1.1.3.3_min.jar
为了使用XStream,需要对其初始化,初始化方法有两种:
应:ejbtimer的要求增加了数组对象的序列化测试,不过我测试时没有设置mode参数也可以正常序列化。
同时这里对mode参数做个简单的说明:
在XStream序列化或反序列化对象时,它会创建两个类MarshallingContext和UnmarshallingContext,由它们来处理数据,以及委派合适的转换器。XStream提供了三对上下文的缺省实现,它们之间有着细微的差别。缺省值可以通过方法XStream.setMode()来改变,需要传递下面参数中的一个:
xstream测试类:XstreamTestMain.java
测试UserBean:UserBean.java
测试ContactBean :ContactBean.java
运行测试代码,打印结果如下:
BEAN转化为XML 字符串-----------------------------
<UserBean>
<userName>michael</userName>
<age>26</age>
<birthday>2011-07-20 23:33:32.969 CST</birthday>
<addresList>
<string>上海杨浦</string>
<string>江苏苏州</string>
</addresList>
<nickNameMap>
<entry>
<string>老公</string>
<string>老婆</string>
</entry>
<entry>
<string>大大</string>
<string>小小</string>
</entry>
</nickNameMap>
<contact>
<postCode>200000</postCode>
<telephone>021-88888888</telephone>
<mobile>1891800xxxx</mobile>
<email>test@test.com</email>
</contact>
<contactArr>
<michael.xstream.ContactBean>
<postCode>200011</postCode>
<telephone>021-11111111</telephone>
<mobile>13911111111</mobile>
<email>contact1@test.com</email>
</michael.xstream.ContactBean>
<michael.xstream.ContactBean>
<postCode>20002</postCode>
<telephone>021-22222222</telephone>
<mobile>13922222222</mobile>
<email>contact2@test.com</email>
</michael.xstream.ContactBean>
</contactArr>
</UserBean>
XML转化为BEAN-----------------------------
userName:michael
age:26
birthday:Wed Jul 20 23:33:32 CST 2011
addres:上海杨浦
addres:江苏苏州
nick name:老公<->老婆
nick name:大大<->小小
postcode:200000
telephone:021-88888888
mobile:1891800xxxx
email:test@test.com
BEAN转化为XML文件-----------------------------
XML文件转化为BEAN-----------------------------
parseFileBean->michael.xstream.UserBean@bf7190
生成的XML文件userbean.xml:
到此测试例子结束,是不是觉得很方便啊,吼吼
转载请注明来自:Michael's blog @ http://sjsky.iteye.com
----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------
我测试过了,对相关代码修改补充好了,好像不需要设置参数mode也可以序列化,不知道你测试时碰到了什么样的问题
这个还真没有测试过,多谢提醒和补充的,下次会补上
XStream是一个简单的类库,可以序列化对象到xml,还可以将xml还原为对象。
XStream官网:http://xstream.codehaus.org/
附件提供XStream和xpp3相关的jar下载:
xstream-1.2.2.jar
xpp3-1.1.3.3_min.jar
为了使用XStream,需要对其初始化,初始化方法有两种:
- XStream xstream = new XStream(); 这种方式的初始化需要xpp3-[version].jar的支持。xpp是一个快速解析XML文件的解析器。
- XStream xstream = new XStream(new DomDriver()); XStream xStream = new XStream(new DomDriver("utf-8")) 这种方式不需要 XPP3.jar的支持,它是使用标准的JAXP DOM来解析它
应:ejbtimer的要求增加了数组对象的序列化测试,不过我测试时没有设置mode参数也可以正常序列化。
同时这里对mode参数做个简单的说明:
在XStream序列化或反序列化对象时,它会创建两个类MarshallingContext和UnmarshallingContext,由它们来处理数据,以及委派合适的转换器。XStream提供了三对上下文的缺省实现,它们之间有着细微的差别。缺省值可以通过方法XStream.setMode()来改变,需要传递下面参数中的一个:
- XStream.XPATH_RELATIVE_REFERENCES:(缺省)通过XPath引用来标识重复的引用,使用相对路径表示。
- XStream.XPATH_ABSOLUTE_REFERENCES:通过XPath引用来标识重复的引用,使用绝对路径表示。
- XStream.ID_REFERENCES:使用ID引用来标识重复的引用。在一些场合(手写XML时),将会更易于操作
- XStream.NO_REFERENCES:这种情况将失去对图形对象的支持,仅把对象看作为树型结构。重复的引用被视作两个不同的对象,循环引用会导致异常产生。相对于上面两种模式,这种模式速度会更快,占用内存会更
xstream测试类:XstreamTestMain.java
package michael.xstream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; /** * Xtream 序列化及反序列化 * @blog http://sjsky.iteye.com * @author Michael */ public class XtreamTestMain { /** * @param args */ public static void main(String[] args) { UserBean userBean = initBean(); // 依懒xpp解析器 // XStream xStream = new XStream(); // 运用标准的DOM解析器 // XStream xStream = new XStream(new DomDriver()); // 指定编码格式 XStream xStream = new XStream(new DomDriver("utf-8")); // xStream.setMode(XStream.NO_REFERENCES); // 直接指定修改生成XML的节点名称 xStream.alias("UserBean", UserBean.class); String xml = xStream.toXML(userBean); System.out.println("BEAN转化为XML 字符串-----------------------------"); System.out.println(xml); System.out.println("XML转化为BEAN-----------------------------"); UserBean parseBean = (UserBean) xStream.fromXML(xml); System.out.println("userName:" + parseBean.getUserName()); System.out.println("age:" + parseBean.getAge()); System.out.println("birthday:" + parseBean.getBirthday()); for (String str : parseBean.getAddresList()) { System.out.println("addres:" + str); } for (Entry<String, String> entry : parseBean.getNickNameMap() .entrySet()) { System.out.println("nick name:" + entry.getKey() + "<->" + entry.getValue()); } ContactBean contact = parseBean.getContact(); System.out.println("postcode:" + contact.getPostCode()); System.out.println("telephone:" + contact.getTelephone()); System.out.println("mobile:" + contact.getMobile()); System.out.println("email:" + contact.getEmail()); System.out.println("BEAN转化为XML文件-----------------------------"); try { FileOutputStream fos = new FileOutputStream("d:/test/userbean.xml"); xStream.toXML(userBean, fos); } catch (Exception ex) { ex.printStackTrace(); } System.out.println("XML文件转化为BEAN-----------------------------"); UserBean parseFileBean = new UserBean(); try { FileInputStream fis = new FileInputStream("d:/test/userbean.xml"); parseFileBean = (UserBean) xStream.fromXML(fis, parseFileBean); System.out.println("parseFileBean->" + parseFileBean); } catch (Exception ex) { ex.printStackTrace(); } } /** * @return test bean */ private static UserBean initBean() { ContactBean contact = new ContactBean(); contact.setPostCode("200000"); contact.setTelephone("021-88888888"); contact.setMobile("1891800xxxx"); contact.setEmail("test@test.com"); List<String> addressList = new ArrayList<String>(); addressList.add("上海杨浦"); addressList.add("江苏苏州"); Map<String, String> nickNameMap = new HashMap<String, String>(); nickNameMap.put("大大", "小小"); nickNameMap.put("老公", "老婆"); UserBean userBean = new UserBean(); userBean.setUserName("michael"); userBean.setAge(26); userBean.setBirthday(new Date()); userBean.setAddresList(addressList); userBean.setNickNameMap(nickNameMap); userBean.setContact(contact); ContactBean contact1 = new ContactBean(); contact1.setPostCode("200011"); contact1.setTelephone("021-11111111"); contact1.setMobile("13911111111"); contact1.setEmail("contact1@test.com"); ContactBean contact2 = new ContactBean(); contact2.setPostCode("20002"); contact2.setTelephone("021-22222222"); contact2.setMobile("13922222222"); contact2.setEmail("contact2@test.com"); ContactBean[] contactArr = new ContactBean[] { contact1, contact2 }; userBean.setContactArr(contactArr); return userBean; } }
测试UserBean:UserBean.java
package michael.xstream; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Michael */ public class UserBean { /** * 用户名称 */ private String userName; /** * 年龄 */ private Integer age; /** * 出生日期 */ private Date birthday; /** * 地址 */ private List<String> addresList = new ArrayList<String>(); /** * 昵称 */ private Map<String, String> nickNameMap = new HashMap<String, String>(); /** * 联系方式Bean */ private ContactBean contact; /** * 测试对象数组 */ private ContactBean[] contactArr; /** * @return the userName */ public String getUserName() { return userName; } /** * @return the age */ public Integer getAge() { return age; } /** * @return the birthday */ public Date getBirthday() { return birthday; } /** * @return the addresList */ public List<String> getAddresList() { return addresList; } /** * @return the nickNameMap */ public Map<String, String> getNickNameMap() { return nickNameMap; } /** * @return the contact */ public ContactBean getContact() { return contact; } /** * @param pUserName the userName to set */ public void setUserName(String pUserName) { userName = pUserName; } /** * @param pAge the age to set */ public void setAge(Integer pAge) { age = pAge; } /** * @param pBirthday the birthday to set */ public void setBirthday(Date pBirthday) { birthday = pBirthday; } /** * @param pAddresList the addresList to set */ public void setAddresList(List<String> pAddresList) { addresList = pAddresList; } /** * @param pNickNameMap the nickNameMap to set */ public void setNickNameMap(Map<String, String> pNickNameMap) { nickNameMap = pNickNameMap; } /** * @param pContact the contact to set */ public void setContact(ContactBean pContact) { contact = pContact; } /** * @return the contactArr */ public ContactBean[] getContactArr() { return contactArr; } /** * @param pContactArr the contactArr to set */ public void setContactArr(ContactBean[] pContactArr) { contactArr = pContactArr; } }
测试ContactBean :ContactBean.java
package com.test; /** * @author Michael */ public class ContactBean { /** * 邮编 */ private String postCode; /** * 电话 */ private String telephone; /** * 手机 */ private String mobile; /** * email */ private String email; /** * @return the postCode */ public String getPostCode() { return postCode; } /** * @return the telephone */ public String getTelephone() { return telephone; } /** * @return the mobile */ public String getMobile() { return mobile; } /** * @return the email */ public String getEmail() { return email; } /** * @param pPostCode the postCode to set */ public void setPostCode(String pPostCode) { postCode = pPostCode; } /** * @param pTelephone the telephone to set */ public void setTelephone(String pTelephone) { telephone = pTelephone; } /** * @param pMobile the mobile to set */ public void setMobile(String pMobile) { mobile = pMobile; } /** * @param pEmail the email to set */ public void setEmail(String pEmail) { email = pEmail; } }
运行测试代码,打印结果如下:
引用
BEAN转化为XML 字符串-----------------------------
<UserBean>
<userName>michael</userName>
<age>26</age>
<birthday>2011-07-20 23:33:32.969 CST</birthday>
<addresList>
<string>上海杨浦</string>
<string>江苏苏州</string>
</addresList>
<nickNameMap>
<entry>
<string>老公</string>
<string>老婆</string>
</entry>
<entry>
<string>大大</string>
<string>小小</string>
</entry>
</nickNameMap>
<contact>
<postCode>200000</postCode>
<telephone>021-88888888</telephone>
<mobile>1891800xxxx</mobile>
<email>test@test.com</email>
</contact>
<contactArr>
<michael.xstream.ContactBean>
<postCode>200011</postCode>
<telephone>021-11111111</telephone>
<mobile>13911111111</mobile>
<email>contact1@test.com</email>
</michael.xstream.ContactBean>
<michael.xstream.ContactBean>
<postCode>20002</postCode>
<telephone>021-22222222</telephone>
<mobile>13922222222</mobile>
<email>contact2@test.com</email>
</michael.xstream.ContactBean>
</contactArr>
</UserBean>
XML转化为BEAN-----------------------------
userName:michael
age:26
birthday:Wed Jul 20 23:33:32 CST 2011
addres:上海杨浦
addres:江苏苏州
nick name:老公<->老婆
nick name:大大<->小小
postcode:200000
telephone:021-88888888
mobile:1891800xxxx
email:test@test.com
BEAN转化为XML文件-----------------------------
XML文件转化为BEAN-----------------------------
parseFileBean->michael.xstream.UserBean@bf7190
生成的XML文件userbean.xml:
<UserBean> <userName>michael</userName> <age>26</age> <birthday>2011-07-20 23:33:32.969 CST</birthday> <addresList> <string>上海杨浦</string> <string>江苏苏州</string> </addresList> <nickNameMap> <entry> <string>老公</string> <string>老婆</string> </entry> <entry> <string>大大</string> <string>小小</string> </entry> </nickNameMap> <contact> <postCode>200000</postCode> <telephone>021-88888888</telephone> <mobile>1891800xxxx</mobile> <email>test@test.com</email> </contact> <contactArr> <michael.xstream.ContactBean> <postCode>200011</postCode> <telephone>021-11111111</telephone> <mobile>13911111111</mobile> <email>contact1@test.com</email> </michael.xstream.ContactBean> <michael.xstream.ContactBean> <postCode>20002</postCode> <telephone>021-22222222</telephone> <mobile>13922222222</mobile> <email>contact2@test.com</email> </michael.xstream.ContactBean> </contactArr> </UserBean>
到此测试例子结束,是不是觉得很方便啊,吼吼
转载请注明来自:Michael's blog @ http://sjsky.iteye.com
----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------
- xstream-1.2.2.jar (364.4 KB)
- 下载次数: 181
- xpp3-1.1.3.3_min.jar (23.8 KB)
- 下载次数: 185
评论
4 楼
sjsky
2011-07-20
ejbtimer 写道
很好很好,
最好再加上对象数组的例子如private ContactBean[] contact;
需要使用
xStream.setMode(XStream.NO_REFERENCES);
这个还是从http://xstream.codehaus.org/index.html上找到的。
最好再加上对象数组的例子如private ContactBean[] contact;
需要使用
xStream.setMode(XStream.NO_REFERENCES);
这个还是从http://xstream.codehaus.org/index.html上找到的。
我测试过了,对相关代码修改补充好了,好像不需要设置参数mode也可以序列化,不知道你测试时碰到了什么样的问题
3 楼
sjsky
2011-07-20
ejbtimer 写道
很好很好,
最好再加上对象数组的例子如private ContactBean[] contact;
需要使用
xStream.setMode(XStream.NO_REFERENCES);
这个还是从http://xstream.codehaus.org/index.html上找到的。
最好再加上对象数组的例子如private ContactBean[] contact;
需要使用
xStream.setMode(XStream.NO_REFERENCES);
这个还是从http://xstream.codehaus.org/index.html上找到的。
这个还真没有测试过,多谢提醒和补充的,下次会补上
2 楼
ejbtimer
2011-07-20
很好很好,
最好再加上对象数组的例子如private ContactBean[] contact;
需要使用
xStream.setMode(XStream.NO_REFERENCES);
这个还是从http://xstream.codehaus.org/index.html上找到的。
最好再加上对象数组的例子如private ContactBean[] contact;
需要使用
xStream.setMode(XStream.NO_REFERENCES);
这个还是从http://xstream.codehaus.org/index.html上找到的。
1 楼
madsion8875
2010-10-14
不错,很好的一个贴子
发表评论
-
$JAVA_HOME环境变量在Mac OS X中设置的问题
2014-01-19 20:31 1650系统版本:Mac OS X 10.9.1 在 ... -
JBoss IIOP实现CORBA/IIOP访问EJB的示例
2014-01-17 14:08 622目录 概述 特性 示例演示 详见:http:// ... -
JavaIDL开发CORBA实例演示
2013-10-25 15:51 536目录: 概述 开发步骤 创建Java项目 -
OpenORB开发CORBA的实例介绍
2013-10-25 15:50 1277目录: 概述 开发步骤 -
java读取控制台输入的几种方法
2013-10-24 09:01 1080java读取控制台输入的 ... -
OSX系统中各种JDK的路径说明
2013-10-15 08:50 649不同厂商发布的JDK,在OSX下的安装路径是不同的。以我本机 ... -
Java 完美判断中文字符
2012-11-23 17:23 1027详见:http://www.micmiu.com/ ... -
java自带的MD5、SHA1算法演示
2012-06-04 10:23 3079详见:http://www.micmiu.com/lang ... -
解决java网络编程IPv6问题
2012-04-05 13:38 1388详见:http://www.micmiu.com/lang/j ... -
swing中Label添加下划线几种方法(含完美版本)
2011-09-30 11:57 3346blog迁移至 :http://www.micmiu. ... -
Java实现给图片添加水印
2011-08-21 12:21 15842blog迁移至 :http://www.m ... -
Java对象序列化ObjectOutputStream和ObjectInputStream示例
2011-08-01 14:14 13708blog迁移至 :http://www.m ... -
proxool连接池介绍
2011-06-29 08:42 3913blog迁移至:http://www.micmiu.c ... -
c3p0配置介绍
2011-06-28 08:56 6618blog迁移至 :http://www.micmiu. ... -
apache-DBCP基本配置介绍
2011-06-27 00:04 13369blog迁移至:http://www ... -
JAVA中IP和整数相互转化介绍
2011-06-22 18:36 4785blog迁移至 :http://www.micmiu. ... -
JAVA线程池ThreadPoolExecutor
2011-06-21 19:00 8991blog迁移至:http://www.micmiu.c ... -
Java 获取当前Classpath
2011-06-19 11:50 8135blog迁移至:http://www ... -
Array和Collection相互转换以及copy深度的小测
2011-06-18 18:46 2278blog迁移至:http://www.micmiu.c ... -
扫描指定包下的类(包括jar文件里的类)
2011-05-27 12:56 5985blog迁移至:http://www.micmiu.c ...
相关推荐
XStream是一个强大的库,它允许开发者以XML格式进行序列化和反序列化Java对象。在这个场景中,我们将深入探讨如何使用XStream处理对象的序列化和反序列化。 首先,让我们了解什么是XStream。XStream是由Joe Walnes...
在提供的压缩包中,`sample.xml`可能是使用XStream序列化后的Java对象示例,而`src`目录可能包含了相关的Java源代码,供学习和参考。通过研究这些文件,你可以更深入地理解XStream的工作原理和使用方式。
标题提到的"xstream-1.1.3正反序列化JAVA对象"是指使用XStream 1.1.3版本来处理Java对象的序列化和反序列化操作。XStream的核心功能在于它可以将复杂的Java对象结构轻松地映射到XML结构上,这使得数据交换和持久化变...
XStream 是一个强大的 Java 库,它允许程序员轻松地将 Java 对象序列化为 XML,同时也能从 XML 数据中反序列化回原来的 Java 对象。这个功能在数据持久化、网络传输或者配置文件存储等方面非常有用。XStream 的设计...
XStream是一款强大的Java库,主要用于将Java对象序列化为XML,并能从XML反序列化回Java对象。这个功能对于数据存储、网络传输或者XML配置文件的解析非常有用。标题和描述提到的三个JAR文件——xstream-1.3.jar、kxml...
XStream与其他XML序列化工具相比,其主要特点包括: - **字段可见性不敏感**:XStream可以序列化私有字段,而无需暴露getter和setter方法。 - **无需默认构造函数**:对象不需要有无参数的构造函数,XStream可以...
反序列化XML回Java对象的过程则相对简单: ```java // 从XML字符串反序列化回Java对象 Person deserializedPerson = (Person) xstream.fromXML(xml); ``` XStream还提供了许多高级特性,比如自定义字段映射、处理...
在IT行业中,XML(eXtensible Markup Language)是一种常用的数据交换格式,广泛应用于系统间的数据传输、配置文件以及序列化。然而,处理XML数据时,解析和转换为可操作的对象是一个常见挑战。这时,XStream库就派...
Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML...
这时,xStream库应运而生,它提供了一个简单、高效的API来实现XML与Java对象之间的序列化和反序列化。 xStream库的核心概念是“映射”,它通过创建一个映射关系,将Java对象与XML元素和属性对应起来。这使得我们...
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列...
在本文中,我们将深入探讨Bboss和Xstream两个序列化和反序列化库在性能方面的差异。这两个库在Java开发中广泛用于将对象转换为XML格式,以便于存储、传输或持久化。以下是对这两个库的详细分析。 首先,Bboss和...
总的来说,XStream是Java开发中处理XML序列化和反序列化的强大工具,其简单易用的API使得XML与Java对象之间的转换变得轻松而高效。通过熟练掌握XStream的使用,开发者可以更好地在Java应用中利用XML进行数据交换和...
Java序列化是将Java对象转换为字节流的过程,以便可以存储在磁盘上或通过网络进行传输。这个过程对于持久化对象数据、跨进程通信和在网络上传输对象非常有用。在Java中,序列化是通过实现`Serializable`接口来完成的...
对于反序列化,我们可以使用`fromXML()`方法将XML字符串还原为Java对象: ```java User deserializedUser = (User) xstream.fromXML(xml); ``` XStream还提供了自定义序列化和反序列化行为的能力。例如,你可以...
接下来,如果要从XML字符串反序列化回Java对象,可以使用XStream的`fromXML()`方法: ```java Person deserializedPerson = (Person) xstream.fromXML(xml); ``` XStream还可以处理复杂的对象结构,包括嵌套的对象...
这样,当我们使用Xstream序列化一个`Person`对象时,会得到如下的XML: ```xml <firstName>John <lastName>Doe ``` 为了序列化Java对象,我们可以创建一个Xstream实例并调用`toXML()`方法: ```java Person ...
5. **反序列化XML**:从XML字符串恢复Java对象同样简单: ```java Person person = (Person) xstream.fromXML(xml); ``` 6. **处理复杂的对象结构**:XStream可以处理嵌套的对象和集合。例如,`Person`类包含一...
**反序列化XML到Bean对象:** XStream也支持将XML数据恢复为Java对象,这对于从XML文件或网络响应中加载数据非常有用。 1. **设置别名**:与序列化相同,你需要设置XML标签的别名,以便XStream知道如何映射回正确的...
总的来说,“使用XStream是实现XML与Java对象的转换(6)--持久化”这个主题涵盖了如何使用XStream进行对象的持久化操作,包括创建XStream实例、序列化和反序列化,以及文件I/O操作。了解这些知识点对于需要在Java项目...