`
baobeituping
  • 浏览: 1064574 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

XBlink 1.0.0版发布,更轻、更快、更好用

 
阅读更多

XBlink 1.0.0版发布,更轻、更快、更好用。

 

 

 

简介:

 

一个轻量级的通用型序列化反序列化工具

 

特点:

 

  • -- 当前版本,无需引入任何第三方jar包,JDK1.5以上适用,大小总共120K
  • -- 简单易用,基本上只需调用一个方法就能帮你搞定问题。
  • -- 无需配置Mapping文件,采用了基于注解的方式,对原有程序基本不造成任何负面影响,最大程度的降低耦合
  • -- 代码量少,结构简单,易于研究学习。
  • -- 采用全新架构,理论上支持所有以文本格式记录信息的文件的序列化工作。本产品将默认支持XMLJSONYAML格式。
  • -- 性能优秀,在速度上已经全面超越XStream,是目前最快的XML序列化工具。

 

XBlink当前情况:

 

该版本目前仅提供了XML的序列化支持,后续版本将支持JSON与YAML格式。

相比之前的版本,采用了新架构,jar包体积稍胖(比XStream还是小很多的),功能与性能上有了大幅提高,并提供了更多的扩展机制。

 

新版本的特性:

 

  • 精简后的注解,简化的API。
  • 支持无注解无配置,直接对现有系统中的类进行序列化。
  • 支持自定义转换器,定制你自己的输出格式。
  • 支持文本格式压缩,以适应开发与生产环境。
  • 支持替换底层输入输入器,你完成可以制造出个性化的“XML”。
使用示例:

定义两个类,Person与PhoneNumber。
Java代码 复制代码
  1. public class Person {   
  2.     private String firstname;   
  3.     private String lastname;   
  4.     private PhoneNumber phone;   
  5.     private PhoneNumber fax;   
  6.     // ... constructors and methods   
  7. }   
  8.   
  9. public class PhoneNumber {   
  10.     private int code;   
  11.     private String number;   
  12.     // ... constructors and methods   
  13. }  
public class Person {
	private String firstname;
	private String lastname;
	private PhoneNumber phone;
	private PhoneNumber fax;
	// ... constructors and methods
}

public class PhoneNumber {
	private int code;
	private String number;
	// ... constructors and methods
}
 

实例化一个Person对象。

 

Java代码 复制代码
  1. PhoneNumber phone = new PhoneNumber();   
  2. phone.setCode(123);   
  3. phone.setNumber("1234-456");   
  4.   
  5. PhoneNumber fax = new PhoneNumber();   
  6. fax.setCode(123);   
  7. fax.setNumber("9999-999");   
  8.   
  9. Person joe = new Person();   
  10. joe.setFirstname("Joe");   
  11. joe.setLastname("Walnes");   
  12. joe.setPhone(phone);   
  13. joe.setFax(fax);  
PhoneNumber phone = new PhoneNumber();
phone.setCode(123);
phone.setNumber("1234-456");

PhoneNumber fax = new PhoneNumber();
fax.setCode(123);
fax.setNumber("9999-999");

Person joe = new Person();
joe.setFirstname("Joe");
joe.setLastname("Walnes");
joe.setPhone(phone);
joe.setFax(fax);

 


注册本次序列化使用的类(这里是为了生成的文件格式更加适合阅读),这一步可以省略。

 

Java代码 复制代码
  1. XBlink.registerClassesToBeUsed(new Class[] { Person.class, PhoneNumber.class });  
XBlink.registerClassesToBeUsed(new Class[] { Person.class, PhoneNumber.class });

 

调用XBlink的序列化方法。

Java代码 复制代码
  1. System.out.println(XBlink.toXml(joe));  
System.out.println(XBlink.toXml(joe));

  

输出结果。

 

Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <person>   
  3.   <firstname>Joe</firstname>   
  4.   <lastname>Walnes</lastname>   
  5.   <phone>   
  6.     <code>123</code>   
  7.     <number>1234-456</number>   
  8.   </phone>   
  9.   <fax>   
  10.     <code>123</code>   
  11.     <number>9999-999</number>   
  12.   </fax>   
  13. </person>  
<?xml version="1.0" encoding="UTF-8"?>
<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
</person>

 

调用XBlink的反序列化方法。

 

Java代码 复制代码
  1. // 这里的xml就是刚才序列化生成的字符串   
  2. Person anthorJoe = (Person) XBlink.fromXml(xml);  
// 这里的xml就是刚才序列化生成的字符串
Person anthorJoe = (Person) XBlink.fromXml(xml);

 

怎么样,是不是如此简单!

 

性能测试:

 

常用的XML序列化框架有XStreamSimple

在速度与易用性上,XStream远远好于Simple,所以XBlink就一直以XStrem作为目标,无视Simple的存在(吐槽下,因为它是在是太难用啦,不信看这里)。


下面是基于上面那个Person示例的测试结果。


序列化比较:


 

序列化次数 XBlink XStream
1次 0 秒, 0 毫秒, 269 微秒 0 秒, 0 毫秒, 562 微秒
10次 0 秒, 2 毫秒, 2182 微秒 0 秒, 5 毫秒, 5426 微秒
100次 0 秒, 21 毫秒, 21454 微秒 0 秒, 37 毫秒, 37727 微秒
1000次 0 秒, 95 毫秒, 95380 微秒 0 秒, 116 毫秒, 116551 微秒
10000次 0 秒, 436 毫秒, 436216 微秒 0 秒, 623 毫秒, 623156 微秒


反序列化比较


 

反序列化次数 XBlink XStream
1次 0 秒, 0 毫秒, 557 微秒 0 秒, 0 毫秒, 767 微秒
10次 0 秒, 4 毫秒, 4231 微秒 0 秒, 5 毫秒, 5680 微秒
100次 0 秒, 21 毫秒, 21346 微秒 0 秒, 34 毫秒, 34830 微秒
1000次 0 秒, 84 毫秒, 84463 微秒 0 秒, 162 毫秒, 162964 微秒
10000次 0 秒, 616 毫秒, 616956 微秒 1 秒, 1282 毫秒, 1282416 微秒

 

相关测试用例请看http://code.google.com/p/xblink/source/browse/trunk/test/performance/testcase/demo/PersonTest.java

 

通过上面的对比,可以发现XBlink在性能上比XStream有大概30%-120%的提升,速度全面超越,基本上现有的框架中XBlink是最快的

 

说明:

 

终于XBlink发布了,算是还债了,呜呜呜。

虽然目前已经取得了一定的成绩,但是在稳定性,易用性与性能上还有很大的提高余地。

欢迎各位朋友下载,试用并提出您宝贵的意见与发现的Bug,ME将尽力尽快的改进,使其更加好用。

分享到:
评论
1 楼 seektolive 2012-04-06  
在学习序列化时看到 XBlink  并喜欢上 目前正在研读代码,非常支持创始者。在学习中发现您好长时间没有更新了,我想问的是换地址了(搜索了半天没有找到最新的托管)  还是此项目暂停了?其他爱好者十分可以修改项目中的bug  有什么要求么? 谢谢 

相关推荐

Global site tag (gtag.js) - Google Analytics