- 浏览: 237268 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
huangtut:
popdyc 写道请问作者有没有遇到过Intellij 插件开 ...
IntelliJ 9 插件开发 -
popdyc:
请问作者有没有遇到过Intellij 插件开发中用Runtim ...
IntelliJ 9 插件开发 -
ggd543:
好文,收藏
IntelliJ 9 插件开发 -
fengwei199181:
不错哦。
Groovy 学习 (整理修改自精通Groovy) -- Groovy 介绍与插件的安装 -
zhengweisincere:
我的评论呢?
通过分析SQL语句的执行计划优化SQL(总结)
XStream是thoughtworks开发的开源产品,采用的是xpp来进行xml和对象之间的转换。它不需要schema或其他的mapping文件就可以进行java对象和xml文件之间的转换,API调用起来非常方便,并且扩展功能强大。
JSON是目前比较流行的轻量级的对象数据转换方式,常常用在ajax和web service领域。目前大部分语言都有JSON的实现。Java领域有json lib,还有xstream json(jettison)。
主要是对3者 (xstream, json lib, xstream json) 转换的数据长度,还有转换的效率做个比较。
转换的java类为:
package com.ldd600.ws;
public class Employee {
private String name;
private int age;
private Address address;
private double salary;
private boolean isActive;
private char sexy;
public String getName() {
return name;
}
public void setName(String naem) {
this.name = naem;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
public char getSexy() {
return sexy;
}
public void setSexy(char sexy) {
this.sexy = sexy;
}
}
package com.ldd600.ws;
public class Address {
private String street;
private String country;
private String city;
private String doorNum;
// private Employee employee;
private String empName;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDoorNum() {
return doorNum;
}
public void setDoorNum(String doorNum) {
this.doorNum = doorNum;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
// public Employee getEmployee() {
// return employee;
// }
//
// public void setEmployee(Employee employee) {
// this.employee = employee;
// }
}
数据格式和长度比较:
方法 长度 格式
Xstream 328 <com.ldd600.ws.Employee>
<name>gavin</name>
<age>0</age>
<address>
<street>zhaojiabang</street>
<country>china</country>
<city>shanghai</city>
<doorNum>789</doorNum>
<empName>gavin</empName>
</address>
<salary>300000.0</salary>
<isActive>true</isActive>
<sexy>m</sexy>
</com.ldd600.ws.Employee>
Json lib 170 "789","empName":"gavin","street":"zhaojiabang"},"age":0,"name":"gavin","salary":300000,"sexy":"m"}
XStream json 183 {"employee":{"name":"gavin","age":0,"address":{"street":"zhaojiabang","country":"china","city":"shanghai","doorNum":789,"empName":"gavin"},"salary":300000,"isActive":true,"sexy":"m"}}
时间(转换次数1000000):
方式 时间(ms)
Json lib 185638
XStream xml 247863
XStream json 395624
Xstream xml方式比json lib慢:62s
Xstream json方式比xstream xml慢:147s
如何选择:
JSON:
只是纯粹数据转换的方式,如果不需要命名空间,验证,XSLT等xml的功能,可以考虑使用。但是JSON规范还存在一些不支持的情况,比如当Address类中也有Employee类的引用时,转换就会抛出异常。要说明的是jettison应该是xml和json之间转换的工具,xstream利用jettison完成java对象到xml再到json的转换,这样性能就更糟糕了。而且xstream json有很多不满足json规范的地方,比如一个空string在json规范中会转成null,而在xstream json中会转换成””, 所以在使用xstream json消费其他json工具生产的json字符串时就会出现问题。但Json lib提供了JSonConfig类解决了这个问题。如果进行xml和json之间的转换可以考虑使用jettison。
Xstream不需要关心xml schema验证,它比json好的一个地方是它可以自动处理引用的表达方式,比如多个变量重复引用同一个对象,循环引用等,如;
<employee reference="../.."/>。
它的API使用太方便了,
XStream xstream = new XStream();
String xml = xstream.toXML(employee);
Employee xsEmployee = (Employee) xstream.fromXML(xml);
Xstream自定义和扩展功能也很强大,如用户可以通过converter来实现自己类型的转换逻辑。
现在我们有个项目需要设计一个通用的web service agent,根据客户端提供的类名,方法名,参数等调用本地的方法。这样可能需要一种统一的数据格式和处理方式,考虑传的参数可能出现互相引用的情况,还有可读性,将来的扩展性等问题决定默认方式还是使用xstream来转换。
JSON是目前比较流行的轻量级的对象数据转换方式,常常用在ajax和web service领域。目前大部分语言都有JSON的实现。Java领域有json lib,还有xstream json(jettison)。
主要是对3者 (xstream, json lib, xstream json) 转换的数据长度,还有转换的效率做个比较。
转换的java类为:
package com.ldd600.ws;
public class Employee {
private String name;
private int age;
private Address address;
private double salary;
private boolean isActive;
private char sexy;
public String getName() {
return name;
}
public void setName(String naem) {
this.name = naem;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
public char getSexy() {
return sexy;
}
public void setSexy(char sexy) {
this.sexy = sexy;
}
}
package com.ldd600.ws;
public class Address {
private String street;
private String country;
private String city;
private String doorNum;
// private Employee employee;
private String empName;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDoorNum() {
return doorNum;
}
public void setDoorNum(String doorNum) {
this.doorNum = doorNum;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
// public Employee getEmployee() {
// return employee;
// }
//
// public void setEmployee(Employee employee) {
// this.employee = employee;
// }
}
数据格式和长度比较:
方法 长度 格式
Xstream 328 <com.ldd600.ws.Employee>
<name>gavin</name>
<age>0</age>
<address>
<street>zhaojiabang</street>
<country>china</country>
<city>shanghai</city>
<doorNum>789</doorNum>
<empName>gavin</empName>
</address>
<salary>300000.0</salary>
<isActive>true</isActive>
<sexy>m</sexy>
</com.ldd600.ws.Employee>
Json lib 170 "789","empName":"gavin","street":"zhaojiabang"},"age":0,"name":"gavin","salary":300000,"sexy":"m"}
XStream json 183 {"employee":{"name":"gavin","age":0,"address":{"street":"zhaojiabang","country":"china","city":"shanghai","doorNum":789,"empName":"gavin"},"salary":300000,"isActive":true,"sexy":"m"}}
时间(转换次数1000000):
方式 时间(ms)
Json lib 185638
XStream xml 247863
XStream json 395624
Xstream xml方式比json lib慢:62s
Xstream json方式比xstream xml慢:147s
如何选择:
JSON:
只是纯粹数据转换的方式,如果不需要命名空间,验证,XSLT等xml的功能,可以考虑使用。但是JSON规范还存在一些不支持的情况,比如当Address类中也有Employee类的引用时,转换就会抛出异常。要说明的是jettison应该是xml和json之间转换的工具,xstream利用jettison完成java对象到xml再到json的转换,这样性能就更糟糕了。而且xstream json有很多不满足json规范的地方,比如一个空string在json规范中会转成null,而在xstream json中会转换成””, 所以在使用xstream json消费其他json工具生产的json字符串时就会出现问题。但Json lib提供了JSonConfig类解决了这个问题。如果进行xml和json之间的转换可以考虑使用jettison。
Xstream不需要关心xml schema验证,它比json好的一个地方是它可以自动处理引用的表达方式,比如多个变量重复引用同一个对象,循环引用等,如;
<employee reference="../.."/>。
它的API使用太方便了,
XStream xstream = new XStream();
String xml = xstream.toXML(employee);
Employee xsEmployee = (Employee) xstream.fromXML(xml);
Xstream自定义和扩展功能也很强大,如用户可以通过converter来实现自己类型的转换逻辑。
现在我们有个项目需要设计一个通用的web service agent,根据客户端提供的类名,方法名,参数等调用本地的方法。这样可能需要一种统一的数据格式和处理方式,考虑传的参数可能出现互相引用的情况,还有可读性,将来的扩展性等问题决定默认方式还是使用xstream来转换。
发表评论
-
spring
2011-07-11 13:49 742SPRING 2.5 API 中文在线 备忘 http://a ... -
转:Tomcat免重启随意更改java代码 提高开发效率
2011-05-19 17:31 1272原文地址:http://blog.chinaacc.com/w ... -
转:Java远程通讯可选技术及原理
2011-05-10 17:33 1150原文地址:http://java.chinai ... -
转:Hessian 原理分析
2011-05-10 17:01 4150原文:http://blog.csdn.net/zhtang0 ... -
转:Java 字符串编码
2010-09-09 16:40 1620出处:http://blog.sina.com.c ... -
另一种遍历Map的方式: Map.Entry 和 Map.entrySet() (转)
2010-06-11 17:13 2396今天看Think in java 的GUI这一章的时候,里面的 ... -
(转载)什么是线程?
2010-03-18 14:56 990什么是线程?2007年06月01日 星期五 09:19线程是程 ... -
Java 内存机制
2009-07-08 12:50 876java中内存分配策略及堆 ... -
JAVA中多种计时器的比较与分析
2009-06-09 14:57 4096介绍 计时器可以提供运行基于时间的工作任务的功能,在计时器 ... -
正确使用 Volatile 变量
2009-05-19 09:31 780Java™ 语言包含两种内 ... -
servlet2.5/jsp2.1的新特征(转载)
2009-04-23 15:03 1008005年9月26日,Sun公司和JSR154的专家组发布Ser ... -
ThreadLocal的设计与使用(原理篇
2009-04-22 10:57 738ThreadLocal的设计与使用(原理篇) ... -
企业系统管理体系 用J2EE架构企业级应用(3)
2009-04-09 21:39 947J2EE的各种组件 我们就J2EE的各种组件、服务和AP ... -
企业系统管理体系 用J2EE架构企业级应用(2)
2009-04-09 21:34 1317企业级资源连接 ... -
企业系统管理体系 用J2EE架构企业级应用(1)
2009-04-09 21:27 1025企业级应用是指那些 ... -
Java 设计原则
2009-03-29 13:13 12311. ”开-闭”原则 (Open-Close Principl ... -
Martin Fowler:持续集成
2008-12-04 16:17 973本文原文链接:http://martinfowler.com/ ... -
十个最好的Java性能故障排除工具
2008-12-01 16:09 1221推荐十个最好的Java性能故障排除工具:1.jconsole是 ... -
转:JDK5.0 新特性--泛型
2007-07-25 15:22 1440JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为 ... -
转:Eclipse快捷键 Template用法探讨
2007-07-23 13:34 2702Eclipse Template用法探讨 在编码的过程中,对 ...
相关推荐
使用xStream实现java对象和xml、json的相互转换
XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不需要配置映射关系,对象和字段将映射为同名XML元素。但是当对象和字段名与XML中的元素名不同时,...
自己写的简单测试demo
很多人都用过Xstream对XML生成和读取,但是对Json的序列化和对象化,还很少有人知道。只需两个类包,就可以比较好的完成了,还不试试……
xstream 将xml文档转换成 java对象,然后就可以利用json库转成json对象啦。
xStream完美转换XML、JSON,包括XML转换成对象,以及对象转换成XML,以及对象转换成JSON,以及注意事项
NULL 博文链接:https://kingxss.iteye.com/blog/1037741
NULL 博文链接:https://xiyang1106.iteye.com/blog/2149652
Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发。 0x01 漏洞描述 Xstream上次对CVE-2020-26217处理并不彻底,虽然通过黑名单...
Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...
XStream在Java对象和XML之间相互转换 内包含 xpp3_min-1.1.4c.jar xstream-1.3.jar kxml2-2.3.0.jar 三个包
XStream必须架包
//extjs的jsp标签库及使用实例 exttld1.0.zip exttldbasic.zip exttld1.0-beta.zip exttldexamples.zip //json的转换器及帮助 ezmorph-1.0.6.jar ezmorph-1.0.6-javadoc.jar ...xstream-1.3.1.jar
xStream 开发指南 xml json 转换 XStream对JSON、XML的都支持,它可以对JSON或XML的完美转换。
最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar ...
xstream最新版jar包
XStream使用例子,如何序列化、反序列化到XML和JSON格式。
赠送jar包:xstream-1.4.11.jar; 赠送原API文档:xstream-1.4.11-javadoc.jar; 赠送源代码:xstream-1.4.11-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
一个小demo展示xml的两种解析方式和四种解析方法,以及使用XStream进行javaBean与xml、json之间的转换
用xstream和betwixt实现对xml、object的互相转换。直接下载到本地后导入到eclipse里可以运行。 适合初学者和项目开发的同学们。