- 浏览: 904912 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 1604系统版本:Mac OS X 10.9.1 在 ... -
JBoss IIOP实现CORBA/IIOP访问EJB的示例
2014-01-17 14:08 589目录 概述 特性 示例演示 详见:http:// ... -
JavaIDL开发CORBA实例演示
2013-10-25 15:51 497目录: 概述 开发步骤 创建Java项目 -
OpenORB开发CORBA的实例介绍
2013-10-25 15:50 1236目录: 概述 开发步骤 -
java读取控制台输入的几种方法
2013-10-24 09:01 1021java读取控制台输入的 ... -
OSX系统中各种JDK的路径说明
2013-10-15 08:50 608不同厂商发布的JDK,在OSX下的安装路径是不同的。以我本机 ... -
Java 完美判断中文字符
2012-11-23 17:23 1000详见:http://www.micmiu.com/ ... -
java自带的MD5、SHA1算法演示
2012-06-04 10:23 3032详见:http://www.micmiu.com/lang ... -
解决java网络编程IPv6问题
2012-04-05 13:38 1348详见:http://www.micmiu.com/lang/j ... -
swing中Label添加下划线几种方法(含完美版本)
2011-09-30 11:57 3267blog迁移至 :http://www.micmiu. ... -
Java实现给图片添加水印
2011-08-21 12:21 15729blog迁移至 :http://www.m ... -
Java对象序列化ObjectOutputStream和ObjectInputStream示例
2011-08-01 14:14 13617blog迁移至 :http://www.m ... -
proxool连接池介绍
2011-06-29 08:42 3858blog迁移至:http://www.micmiu.c ... -
c3p0配置介绍
2011-06-28 08:56 6560blog迁移至 :http://www.micmiu. ... -
apache-DBCP基本配置介绍
2011-06-27 00:04 13294blog迁移至:http://www ... -
JAVA中IP和整数相互转化介绍
2011-06-22 18:36 4745blog迁移至 :http://www.micmiu. ... -
JAVA线程池ThreadPoolExecutor
2011-06-21 19:00 8916blog迁移至:http://www.micmiu.c ... -
Java 获取当前Classpath
2011-06-19 11:50 8074blog迁移至:http://www ... -
Array和Collection相互转换以及copy深度的小测
2011-06-18 18:46 2208blog迁移至:http://www.micmiu.c ... -
扫描指定包下的类(包括jar文件里的类)
2011-05-27 12:56 5942blog迁移至:http://www.micmiu.c ...
相关推荐
使用XStream序列化/反序列化对象
使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列...
使用 XStream 把 Java 对象序列化为 XML
NULL 博文链接:https://dolphin-ygj.iteye.com/blog/567748
xstream中xml与javaBean的互转
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁琐。XStream使用起来非常简单,不需要预先生成相关...
XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不...
XStream:XStream是一个简单易用的Java库,用于序列化和反序列化对象。它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 <groupId>com.thoughtworks.xstream</groupId> <artifactId>...
因此XML常用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。 Stream对象相当Java对象和XML之间的转换器,转换过程是双向的。创建XSteam对象的方式很简单,只需要new XStream()即可。...
Java到XML序列化,然后再返回 二进制文件 所有二进制工件都捆绑在-bin归档文件中。 它包括XStream jar和在构建时使用的任何其他库,或可选的运行时额外功能。 建议使用Xpp3,因为它将大大提高XStream的性能。 文献...
xstream反序列化流程分析测试demo代码如下所示:跟入 com.thoughtworks.xstream 的 fromXML 函数,接收前端传入的 Str
使用 XStream不用任何映射就能实现多数 Java 对象的序列化。 在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML中的元素内容 xstream-1.4.2.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar
xstream-1.4.2.jar,xpp3_min-1.1.4.jar,xmlpull-1.1.3.1.jar 包括 //XML --> JavaBean, //XML --> JavaBean //JavaBean --> JSON,//JSON--> JavaBean
1、xml序列化的Java3种实现方法 1)Serializable和Externalizable接口Xstream框架2)Simple框架 3)Apache的AXIOM框架 2、XML验证文档的生成工具 trang.jar 3、利用XSD文件的XML3种验证方法 1)Dom4j的SAXValidator ...
Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发。 0x01 漏洞描述 Xstream上次对CVE-2020-26217处理并不彻底,虽然通过黑名单...
Struts2 XStream插件:基于Java开发,包含20个文件,包括12个Java类文件...该项目是一个Struts2插件,可以输出JSON或XML格式数据,使用Xstream库进行序列化和反序列化,旨在为开发者提供一个高效、便捷的数据处理工具。
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...
包含这三个jar包:kxml2-2.3.0.jar、xmlpull-1.1.3.1.jar、xstream-1.4.3.jar。是将文件序列化成xml文件所必须的jar包
XStream是Java版本的对XML进行序列化以及反系列化的开源工具包 这是一个.net版本的XStream类库,使用方便
XStream是以个实现序列化数据和xml之间相互转换的类库,使用非常简单、方便