
XBlink1.0.0版发布:更轻更快更好用
简介:
一个轻量级的通用型序列化反序列化工具
特点:
- 轻 -- 当前版本,无需引入任何第三方jar包,JDK1.5以上适用,大小总共120K。
- 易 -- 简单易用,基本上只需调用一个方法就能帮你搞定问题。
- 简 -- 无需配置Mapping文件,采用了基于注解的方式,对原有程序基本不造成任何负面影响,最大程度的降低耦合。
- 学 -- 代码量少,结构简单,易于研究学习。
- 通 -- 采用全新架构,理论上支持所有以文本格式记录信息的文件的序列化工作。本产品将默认支持XML,JSON与YAML格式。
- 快 -- 性能优秀,在速度上已经全面超越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序列化框架有XStream,Simple。
在速度与易用性上,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版的文档还在陆续编写中,请持续关注,谢谢。
分享到:
相关推荐
// ****************************** 通用反序列化 ****************************** /** * fromAny意味着可以从任意格式的文件中得到你想要的那个对象。 * * XBlink最NB的反序列方法,生成你需要的对象...
内容概要:本文详细介绍了如何使用TensorRT加速YOLOv5模型推理,并结合QT框架搭建一个多任务并行处理的智能监控平台。主要内容包括:YOLOv5与TensorRT的融合,通过将YOLOv5模型转换为ONNX格式并进一步转化为TensorRT引擎,从而大幅提升推理速度;QT框架的应用,利用其跨平台特性实现视频监控、录像回放、电子地图等多种功能;16路视频并行检测的具体实现,通过多线程机制和CUDA流的支持,确保系统的高效运行。此外,文章还探讨了模型热更新、网络流处理、日志记录等方面的优化措施。 适合人群:具备一定编程基础,尤其是熟悉C++、Python和深度学习框架的研究人员和技术开发人员。 使用场景及目标:适用于需要高效、智能监控解决方案的企业和个人开发者。主要目标是提高视频监控系统的效率和智能化水平,如安防监控、交通监测等领域。 其他说明:文中提供了大量代码示例,帮助读者更好地理解和应用所介绍的技术。同时强调了系统设计中的性能优化技巧,如内存管理和多线程调度等。
反极域和远程机惨的好工具
内容概要:本文详细介绍了如何利用MATLAB的GUI界面模拟电子双缝衍射实验。通过创建自定义的GUI界面,用户可以输入缝宽a、双缝间距b、加速电压U、缝屏距离D以及电子数目n等参数,实时观察衍射图样的变化。文中不仅提供了详细的代码实现步骤,还解释了各个参数对衍射图样的具体影响,如缝宽a的变化会影响条纹宽度,加速电压U的变化会影响条纹间距等。此外,文章还讨论了一些特殊情况下(如缝间距过大)的非预期现象及其背后的物理原因。 适合人群:物理学专业学生、教师以及对量子力学感兴趣的科研工作者。 使用场景及目标:①作为教学辅助工具,帮助学生更直观地理解电子双缝衍射实验及其背后的物理原理;②作为一种研究手段,探索不同参数条件下电子双缝衍射的具体表现形式。 其他说明:作者提醒使用者不要将电子数目n设得过高以免造成程序运行缓慢,并指出了一些常见的错误配置可能导致的异常情况。同时,提供了一个GitHub链接供有兴趣的读者进一步探讨和改进。
实训商业源码-qui-pure.v2.5-毕业设计.zip
scratch少儿编程逻辑思维游戏源码-有弹性的…猫.zip
内容概要:本文详细介绍了汇川H3U系列可编程控制器在多轴伺服定位控制方面的应用案例。文章分为三个主要部分:一是本体脉冲控制的三轴伺服定位,展示了通过梯形图实现脉冲输出控制轴运动的方法;二是总线控制的16轴汇川伺服定位,利用结构体数组管理和初始化多个轴的数据,实现了高效的总线通信;三是具体的功能实现,包括轴点动、回零、相对定位与绝对定位等功能的代码示例及其工作原理。此外,文中强调了模块化设计的重要性,通过合理的分层架构提高了系统的灵活性和稳定性。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对伺服控制系统感兴趣的初学者和有一定经验的研发人员。 使用场景及目标:适用于需要理解和掌握多轴伺服定位控制原理的实际工程项目中,旨在帮助读者深入理解汇川H3U控制器的工作机制,掌握具体的编程技巧,以便更好地应用于实际生产环境。 其他说明:文章不仅提供了详细的代码示例,还分享了许多宝贵的实践经验,如状态机的应用、异常处理机制等,这些都是提高程序可靠性的关键因素。
内容概要:本文详细介绍了二进制比较器的设计原理与实现方法。文章首先讲解了二进制比较器的基本概念,包括32位数字比较器的原理图绘制方法。文中提到可以使用二进制比较芯片(如74LS85)组合实现大于、等于、小于的功能,其中不等是通过大于和小于的或逻辑并归实现,大于则是芯片固有的功能,小于等于则是等于和小于的或逻辑并归。对于门电路合成,文章提到了使用74LS04D+08+86等元件组成一位二进制比较器,但指出位数增加会使逻辑变得复杂,不推荐自行合成。此外,还介绍了2位二进制比较器的工作原理,当高位不同时无需比较低位,只有当高位相同时才需要比较低位。最后,文章讨论了集成数值比较器74LS85的功能及其位数扩展方式,包括串联和并联两种扩展方法。 适合人群:具有一定的数字电路基础,对二进制比较器感兴趣的电子工程学生或工程师。 使用场景及目标:①理解二进制比较器的基本原理和工作方式;②掌握二进制比较器的硬件实现方法,特别是如何利用现有芯片构建多位比较器;③学习如何通过逻辑门电路实现简单的二进制比较功能。 阅读建议:读者在学习过程中应结合实际电路图和逻辑表达式进行理解和验证,特别是对于不同位数的二进制比较器,可以通过实际搭建电路来加深理解。
实训商业源码-昂图文10.2.20 公众号版-毕业设计.zip
【实用脚本工具】相关内容与技巧的【VIP资源】,包
scratch少儿编程逻辑思维游戏源码-宇宙幽灵 Boss 之战.zip
内容概要:本文详细介绍了基于西门子S7-200 PLC和组态王的机械手搬运控制系统的实现方案。首先,文章展示了梯形图程序的关键逻辑,如急停连锁保护、水平移动互锁以及定时器的应用。接着,详细解释了IO分配的具体配置,包括数字输入、数字输出和模拟量接口的功能划分。此外,还讨论了接线图的设计注意事项,强调了电磁阀供电和继电器隔离的重要性。组态王的画面设计部分涵盖了三层画面结构(总览页、参数页、调试页)及其动画脚本的编写。最后,分享了调试过程中遇到的问题及解决方案,如传感器抖动、输出互锁设计等。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是对PLC编程和组态软件有一定基础的读者。 使用场景及目标:适用于自动化生产线中机械手搬运控制系统的开发与调试。目标是帮助读者掌握从硬件接线到软件逻辑的完整实现过程,提高系统的稳定性和可靠性。 其他说明:文中提供了大量实践经验,包括常见的错误和解决方案,有助于读者在实际工作中少走弯路。
内容概要:本文详细介绍了如何使用MATLAB对声发射波形进行参数计算和单边振幅谱绘制。主要内容涵盖声发射波形的基本参数(如峰值振幅、上升时间和持续时间)、特征参数(如均方根振幅和能量)的计算方法,以及通过快速傅里叶变换(FFT)绘制单边振幅谱的具体步骤。文中提供了详细的MATLAB代码示例,帮助读者理解和实现这些操作。 适合人群:从事材料科学、无损检测等相关领域的研究人员和技术人员,尤其是有一定MATLAB基础的用户。 使用场景及目标:适用于需要对声发射信号进行深入分析的研究项目,旨在提高对声发射事件的理解和诊断能力。具体应用场景包括但不限于材料疲劳测试、结构健康监测等。 其他说明:文中还提到了一些实用技巧,如处理复数信号、使用窗函数减少频谱泄漏、去除直流分量等,有助于提升数据分析的准确性。此外,建议将整个分析流程封装成函数以便于重复使用。
scratch少儿编程逻辑思维游戏源码-寻觅故事者.zip
scratch少儿编程逻辑思维游戏源码-希望奔跑.zip
内容概要:本文深入探讨了单相和三相交流调压技术,详细介绍了这两种技术的工作原理、应用场景以及波形变化规律。首先,文章解释了单相交流调压的基本概念,即通过对单一相位的交流电进行触发角调整来实现电压调节。接着,重点讨论了三相交流调压的特点,特别是在带有中性线的情况下,它能提供更稳定的参考点并支持复杂的工业应用。此外,文中还涉及了桥式半控整流电路的仿真实验,展示了不同触发角和负载条件下的波形变化情况。最后,文章展望了未来交流调压技术面临的挑战和发展机遇。 适合人群:从事电力电子相关行业的技术人员、研究人员及高校师生。 使用场景及目标:帮助读者深入了解单相和三相交流调压技术的具体实现方式,掌握波形变化规律,提升实际操作能力。 其他说明:文章结合理论与实践,既包含了基础知识介绍又涵盖了最新的研究成果和技术趋势。
实训商业源码-【超人】商家联盟 3.2.2-毕业设计.zip
Go语言,通常被称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。它的设计目标是提高开发者的生产力和程序的运行效率,特别适合构建网络服务和分布式系统。在Windows操作系统下,安装Golang开发环境需要下载相应的安装包。这里提供的"Go开发工具,golang IDE安装包,windows系统下"包含了Golang的集成开发环境(IDE)——Goland以及相关的使用说明。 Goland是一款由JetBrains公司推出的专门针对Go语言的高效开发工具,它为Go开发者提供了强大的代码补全、调试、重构和代码审查等功能。Goland-2018.3.exe是该IDE的一个特定版本,可能包含了2018年第三季度的一些更新和改进,用户可以通过执行这个可执行文件来安装Goland。 在安装过程中,用户通常需要选择安装路径,确认是否添加到PATH环境变量,以便在命令行中直接使用go命令。安装完成后,Goland会自动检测并配置Go的编译环境,包括设置GOROOT(Go语言的安装目录)和GOPATH(工作区路径),这对于新手来说是非常方便的。 同时,压缩包中的"golang说明.txt"文件很可能是对如何使用Golang进行开发,以及如何操作Goland IDE的基本指导。这份文件可能涵盖了如何创建新项目、设置Go环境变量、使用内置的包管理器go mod、运行和调试程序等内容。对于初学者来说,这是理解并快速上手Go语言开发的重要参考资料。 在使用Golang进行开发时,有几个关键概念是需要了解的: 1. **GOPATH**:在早期版本中,GOPATH是存放项目源码、编译后的对象文件和第三方包的地方。从Go 1.11版本开始,引入了go modules,但理解GOPATH仍然有助于理解Go的工作方式。 2. **Go Mod
scratch少儿编程逻辑思维游戏源码-西利斯通城堡.zip