阅读更多

29顶
0踩

开源软件

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

 

 

 

简介:

 

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

 

特点:

 

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

 

XBlink当前情况:

 

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

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

 

新版本的特性:

 

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

定义两个类,Person与PhoneNumber。
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对象。

 

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);
 


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

 

XBlink.registerClassesToBeUsed(new Class[] { Person.class, PhoneNumber.class });
 

调用XBlink的序列化方法。

System.out.println(XBlink.toXml(joe));

  

输出结果。

 

<?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的反序列化方法。

 

// 这里的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将尽力尽快的改进,使其更加好用。

 

总是,求下载,求使用,求反馈,求Bug,求虐,求包养...

 

最后:

 

更多详情请关注官网:http://code.google.com/p/xblink/

下载地址:http://code.google.com/p/xblink/downloads/detail?name=XBlink-1.0.0.zip&can=2&q=


PS:由于时间仓促,官网上关于1.0.0版的文档还在陆续编写中,请持续关注,谢谢。

29
0
评论 共 72 条 请登录后发表评论
12 楼 pangwu86 2011-10-09 12:33
windir 写道
赞一个,我就说风格那么相似

呵呵,是的,部分接口API模仿了XStream,也做了些简化与扩展,更好用了。
11 楼 mahonet 2011-10-09 12:23
国产的?貌似现在国产的越来越多了,不错。
10 楼 windir 2011-10-09 12:19
赞一个,我就说风格那么相似
9 楼 pangwu86 2011-10-09 12:00
obullxl 写道
顶,试下JSON。

不好意思,当前版本还没加入json的实现,请期待下个版本
8 楼 obullxl 2011-10-09 11:58
顶,试下JSON。
7 楼 htwoolotus 2011-10-09 10:49
支持!有机会一定要用一下
6 楼 pangwu86 2011-10-09 10:41
faiinlove 写道
pangwu86 写道
faiinlove 写道
请问,能用在android上面吗?

没试过,欢迎尝试并提出宝贵意见。

我觉得很有必要做做android测试,或者根据android的sdk特性,出一个android版本。因为android非常需要序列化与反序列化工具,特别是和服务器的交互过程。

嗯嗯,不过ME没有做过android开发,有能力的朋友帮着测试下吧,或者告诉ME如何进行测试,给个意见
5 楼 faiinlove 2011-10-09 10:29
pangwu86 写道
faiinlove 写道
请问,能用在android上面吗?

没试过,欢迎尝试并提出宝贵意见。

我觉得很有必要做做android测试,或者根据android的sdk特性,出一个android版本。因为android非常需要序列化与反序列化工具,特别是和服务器的交互过程。
4 楼 pangwu86 2011-10-09 10:20
faiinlove 写道
请问,能用在android上面吗?

没试过,欢迎尝试并提出宝贵意见。
3 楼 pangwu86 2011-10-09 10:17
caoyangx 写道
特点:



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

以上特点好像Nutz的简介风格。


Nutz是兄弟项目,向兄弟看起
2 楼 caoyangx 2011-10-09 10:13
特点:



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

以上特点好像Nutz的简介风格。
1 楼 faiinlove 2011-10-09 09:59
请问,能用在android上面吗?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • SQL中的子查询

    当我们进⾏语句查询的时候,总会遇到我们需要的条件需要通过另⼀个查询语句查询出来后才能进⾏,就是说A 查询语句需要依赖B 查询语句的查询结果,B 查询就是⼦查询,A 查询语句就是主查询,⼀个SQL语句可以包含多个⼦查询。

  • SQL自学:什么是子查询,如何使用它们

    子查询是一个嵌套在另一个 SQL 查询(通常是 SELECT、INSERT、UPDATE 或 DELETE 语句)中的查询。它的结果被用作外部查询的一部分,以进一步筛选、聚合或连接数据。子查询可以返回单个值、一行或一列数据,甚至是一个完整的结果集,具体取决于它在外部查询中的使用方式。在这个例子中,内部查询返回了订单数量大于 10 的产品 ID,外部查询则使用这些产品 ID 从products表中检索出对应的产品名称。

  • 第17章 子查询

    介绍子查询的使用、分类和注意事项,以及SELECT结构中哪些位置可以使用子查询。

  • sql子查询详解

    子查询指一个查询语句嵌套在另一个查询语句内部的查询。SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。先引出几张简单的表,供后续使用,分别为emp员工表:dept部门表我们需要查出工资比id为2的员工的工资多的所有用户。解决方式: 注意事项:我们按内查询的结果返回一条还是多条记录,将子查询分为单行子查询 、 多行子查询 。上面的例子

  • SQL子查询

    SQL的子查询思路及实现

  • SQL入门之第十七讲——子查询

    子查询顾名思义,就是在在查询中,嵌套了一层子查询,用来完成更复杂的数据检索,子查询的结果将作为主查询的条件来使用 子查询主要的类型有: 子查询+ WHERE子句 子查询+ FROM子句 子查询+ SELECT子句 SQL语句中嵌套语句,是比较常见的,子查询用括号括起来。 基本语法: select &lt;字段名&gt; from &lt;表名&gt; where ( select &lt;字段名&gt; from &lt;表名&gt; ); 一般称外面的嵌套的语句为 主查询(也叫外查询),里面

  • sql 子查询及基本语句 挺全的收录

    引自https://blog.csdn.net/jia_gugang/article/details/80282873一、SQL子查询语句      1、单行子查询        select ename,deptno,sal        from emp        where deptno=(select deptno from dept where loc='NEW YORK');   ...

  • 基于CBO的SQL优化和Oracle实例优化

    SQL优化是数据优化的重要方面,本文将分析Oracle自身的CBO优化,即基于成本的优化方法。Oracle为了自动的优化sql语句需要各种统计数据作为优化基础。外面会通过sql的追踪来分析sql的执行过程,消耗的资源信息。对于数据库的性能问题往往是在系统部署一段时间之后出现的,即大量用户开始使用该系统,系统的数据处理量和各种计算复杂性增加的时候,这个时候往往会追溯到系统的初始设计阶段,所以我们还是

  • Oracle从零开始07——SQL语句06——子查询

    8. 子查询 子查询定义:在一个查询的内部还包括另外一个查询 子查询格式:在小括号中编写代码 SELECT DISTINCT *|列名 别名 FROM 表名 别名 {括号内容就是子查询 SELECT DISTINCT *|列名 别名 FROM 表名 别名 {WHERE 条件(s)} {GROUP BY分组条件{HAVI...

  • SQL嵌套Select语句的用法

    http://database.51cto.com/art/201011/233200.htm SQL嵌套SELECT语句是很常见的SQL语句,下面就为您详细介绍SQL嵌套SELECT语句的语法,并附相关示例,供您参考学习之用。 嵌套SELECT语句也叫子查询,一个SELECT 语句的查询结果能够作为另一个语句的输入值。子查询不但能够出现在Where子句中,也能够出现在from子句

  • mysql数据库个人总结

    mysql个人总结

  • SQL实战:子查询的应用实例

    本实例设计到的SQL语法包括: select , delete, distict, not exists, not in, group by, having, min, max

  • 各种SQL子查询实例

    返回订单表中订单价值超过5000美元的那些客户的详细信息。 SELECT * FROM customers WHERE cust_id IN (SELECT DISTINCT cust_id FROM orders WHERE order_value &gt; 5000); 子查询也可以与INSERT语句一起使用。 INSERT INTO premium_customers SELECT * FROM customers WHERE cust_id IN (SELECT DISTINCT cust_i..

  • 用一个简单的例子说明SQL子查询

    SQL的子查询(subqueries) 用一个简单的例子来说明subqueries的应用。 现有两个表格,第一个表格名为student,第二个表格名为student_information。 第一个表格: 第二个表格: 两个表格有一含有相同数据的列student_num,用来表示学生学号。 那么老板布置了这么一个任务,请你找出名为Chris的同学的微信号。 要完成这个任务,有两个方法可以采用。第一个方法是使用两次SELECT语句,第二个方法是只用子查询。 第一个方法的具体步骤: SELECT stude

  • 数据库学习(九)—SQL数据查询06(子查询)

    目录 3.9子查询 3.9.1标量子查询 3.9.2列级子查询 3.9.3 行级子查询 3.9.4表级子查询 3.9.5子查询中特定关键字使用 3.9.6 ‼总结 3.9子查询 在一个select语句中,嵌入了另外一个select语句.那么被嵌入的select语句称之为子查询语句 主查询 主要查询的对象第一 条select语句 主查询和子查询的关系 子查询是嵌入到主查询中 子查询是辅助主查询的,要么充当条件,要么充当数据源 子查询是可以独立存在的语句,...

  • ORACLE三层子查询

    以Oracle11G数据库中scott用户的emp雇员表为例   第一层查询 SELECT EMPNO, ENAME FROM EMP ORDER BY EMPNO; 结果 第二层查询 SELECT ROWNUM, EMPNO, ENAME FROM (SELECT EMPNO, ENAME FROM EMP ORDER BY EMPNO) ...

  • mysql查询3层_SQL学习笔记之MySQL查询的三层解析

    Mysqld的三层结构:SQL类型:DDL:数据库对象定义语言对库和表的定义DML:操作语言DCL:控制语言结构化的查询语言:select * from user;执行该语句时:1、连接层:验证 该用户的用户名、密码、端口号,并提供连接连接层作用: 1。提供连接协议(TCP/IP socket)2. 验证功能身份信息3、提供一个专门的连接线程(接受用户发来的SQL语句,并在执行完成之后返回最终结果...

Global site tag (gtag.js) - Google Analytics