`

bboss 序列化功能详解

阅读更多
bboss 序列化功能详解,bboss序列化组件是bbossgroups框架体系中的又一个非常给力的功能构件,可以非常方便地实现对象到xml的相互转换功能,本文详细介绍bboss序列化功能的特点及使用方法。

1.Bboss 序列化功能组件及依赖的jar包

1.1 主要组件和注解
组件
org.frameworkset.soa.ObjectSerializable
ObjectSerializable组件提供了序列化和反序列化的主要api:
序列化api
//将对象obj序列化成xml串并返回该串
public final static String toXML(Object obj)
//将对象obj序列化成xml串,并将该串写入到Writer对象out中
public final static void toXML(Object obj, Writer out)


反序列化api
//将beanxml参数对应的xml串转换为beantype类型的对象并返回该对象,采用泛型方式
public static <T> T toBean(String beanxml, Class<T> beantype)
//将instream参数对应的xml字符流转换为beantype类型的对象并返回该对象,采用泛型方式
public static <T> T toBean(InputStream instream, Class<T> beantype)


注解
org.frameworkset.soa.annotation.ExcludeField

ExcludeField注解主要的作用就是用来过滤对象中不需要序列化的属性,目前只对对象属性起作用,后续可以加到get方法。ExcludeField注解的作用类似于java保留字transient的作用,bboss序列化组件同样也支持transient关键字,只要属性前面加了transient关键字,序列化时也会被忽略。ExcludeField用法如下:
@ExcludeField
private String excludeField


1.2 依赖的jar包,可点击链接下载,如果地址无法访问,也可以点击每个jar文件上的连接从github下载
bboss-core.jar
cglib-nodep-2.2.jar
frameworkset-util.jar
log4j-1.2.16.jar
bboss-soa.jar
jakarta-oro-2.0.8.jar

2.Bboss 序列化功能特点

(1).支持高效的xml-bean相互转换(序列化和反序列化)
(2).支持各种数据类型的序列化和反序列化,支持文件的序列化和反序列化
(3).支持对象间各种关系的序列化和反序列化(对象恢复后能够恢复对象间的引用关系以及循环递归引用关系,例如树结构的对象关系,单向父子对象关系,双向父子对象关系)
(4).序列化时可以过滤以下类型属性:
transient
static
final
@Exclude注解过的属性

3.指定序列化过程中可以忽略的异常信息,以换行符分割
在配置文件/resources/org/frameworkset/soa/serialconf.xml的ignoreExceptions节点中进行设置:
<property name="ignoreExceptions">
		<![CDATA[
		org.frameworkset.soa.IgnoreException1
		org.frameworkset.soa.IgnoreException2
		]]>
	</property>

默认忽略org.hibernate.LazyInitializationException异常

4.Bboss 序列化功能使用
本小节以一个简单的实例来说明如何通过bboss来实现组件序列化功能.
4.1 首先看简单对象序列化和反序列化操作
//构建和初始化要序列化的简单对象实例
TransientFieldBean transientFieldBean = new TransientFieldBean("onlyField");
		transientFieldBean.setExcludeField("exccc");
		transientFieldBean.setStaticFiled("staticFiled");
		transientFieldBean.setTransientField("transientField");
//对象序列化
		String xml = ObjectSerializable.toXML(transientFieldBean);
//反序列化
		TransientFieldBean transientFieldBean_new = ObjectSerializable.toBean(xml, TransientFieldBean.class);


4.2 再看一个复杂对象数据结构的序列化和反序列化操作
//构建和初始化要序列化的复杂对象实例,对象test1引用对象test2和test3,test2引
//用test1,对象test3引用对象test2,这样就构造了一个具有相互引用的关系网,
//bboss序列化组件可以非常方便地对这种结构的对象进行序列化和反序列化,而且能够
//很好地保持这种复杂的引用关系
Test1 test1 = new Test1();
		Test2 test2 = new Test2();
		Test3 test3 = new Test3();
		test2.setTest1(test1);
		test1.setTest2(test2);
		test1.setTest3(test3);
		test3.setTest2(test2);
//序列化test1对象
		String ss = ObjectSerializable.toXML(test1);
//反序列化
		Test1 test1_ =  (Test1)ObjectSerializable.toBean(ss,Test1.class);


4.3 再看一个文件对象的序列化和反序列化操作

//构造一个带文件属性的对象joe
File fileData = new File("D:\\workspace\\bbossgroups-3.2\\bboss-soa\\test\\org\\frameworkset\\soa\\testxstream.xml");
FilePerson joe = new FilePerson();
		joe.setFileData(fileData);
//序列化对象joe
String xml = ObjectSerializable.toXML(joe);
//反序列化
FilePerson person = ObjectSerializable.toBean( xml, FilePerson.class);


更详细的实例请参考测试用例

5.Bboss 序列化功能应用

bboss序列化功能目前已经被广泛应用于基于http/netty/mina/webservice/jms 等通讯协议的rpc框架中,性能表现良好。

参考文档:
bbossgroups 对象xml序列化/反序列化性能测试
bboss 序列化机制重大改进-支持复杂对象及对象之间关系序列化和恢复功能


为了验证hessian和bboss序列化功能的差异性特意做了个对比测试。
分别用bboss和hessian序列化和反序列化带有47K数据的对象实例,测试结果如下:

bboss:序列化生成数据大小48274byte,耗时:47毫秒
hessian:序列化生成数据大小47801byte,耗时:62毫秒
bboss 反序列化耗时:125毫秒
hessian 反序列化耗时:32毫秒

从测试结果来看,bboss序列化速度比hessian稍快,反序化比hessian慢4倍,序列化产生的数据大小比hessian略大一些。

hessian的版本是4.0.7,bboss 的版本是4.0.7。

测试代码附下:

@Test
	public void testHessianSerializable() throws Exception
	{
		Test1 test1 = new Test1();
		Test2 test2 = new Test2();
		Test3 test3 = new Test3();
		test2.setTest1(test1);
		test1.setTest2(test2);
		test1.setTest3(test3);
		test3.setTest2(test2);
		try
		{
			String bigcontent = FileUtil.getFileContent(new File("D:\\workspace\\bbossgroups-3.5\\bboss-soa\\test\\org\\frameworkset\\soa\\testxstream.xml"), "GBK");//testxstream.xml是一个47K大小的xml文件
			test1.setXmlvalue(bigcontent);
			long s = System.currentTimeMillis();
			String xml = ObjectSerializable.toXML(test1);//bboss 序列化
			long e = System.currentTimeMillis();
			System.out.println("bboss:"+xml.getBytes().length + ",times:" + (e - s));
			s = System.currentTimeMillis();
			Test1 test1_ =  (Test1)ObjectSerializable.toBean(xml,Test1.class);//bboss 反序列化
			e = System.currentTimeMillis();
			System.out.println("bboss de times:" + (e - s));
			s = System.currentTimeMillis();//hessian序列化
			ByteArrayOutputStream os = new ByteArrayOutputStream();   
			HessianOutput ho = new HessianOutput(os);   
			ho.writeObject(test1);   
			byte[] cs = os.toByteArray();   
			e = System.currentTimeMillis();

			System.out.println("hessian:"+cs.length+ ",times:" + (e - s));
			s = System.currentTimeMillis();//hessian反序列化
			ByteArrayInputStream is = new ByteArrayInputStream(cs);   
			 HessianInput hi = new HessianInput(is);   
			 test1_ =  (Test1) hi.readObject();   
			 e = System.currentTimeMillis();
				System.out.println("hessian de times:" + (e - s));
			
			//测试用例结束
			
			
		}
		catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}




分享到:
评论

相关推荐

    Bboss和xstream序列化反序列化性能对比1

    在本文中,我们将深入探讨Bboss和Xstream两个序列化和反序列化库在性能方面的差异。这两个库在Java开发中广泛用于将对象转换为XML格式,以便于存储、传输或持久化。以下是对这两个库的详细分析。 首先,Bboss和...

    Bboss国际化实践.ppt

    【Bboss国际化实践】主要涉及了软件系统的全球化适应性改造,以便支持多语言环境。以下是对这个主题的详细解析: 1. **界面元素国际化**: - 界面文字:所有用户可见的文字都需要进行翻译,确保不同语言环境下的...

    bboss会话共享培训文档

    bboss会话共享通过为应用提供统一的会话管理功能,保证了即使用户被切换到其他节点,也能够继续访问之前保存的会话数据。 其次,bboss会话共享支持跨域和跨应用的会话共享,并能实现单点登录(SSO)功能。单点登录...

    由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能

    其流批一体化的设计理念、丰富多样的数据处理功能以及良好的社区支持,使其在数据处理领域具有很高的实用价值。通过深入学习和使用bboss-datatran,用户可以提升数据处理效率,更好地挖掘数据的价值。

    bboss 安全认证过滤器功能介绍

    通过阅读`SYSAuthenticateFilter.java`的源码,我们可以深入了解BBoss框架如何实现这些功能,并学习如何自定义和扩展安全认证过滤器,以满足特定的应用场景需求。源码分析有助于我们更好地理解和控制Web应用的安全...

    springboot整合bboss es增删改查测试demo代码

    单集群演示功能测试用例,spring boot配置项以spring.elasticsearch.bboss开头 对应的配置文件为application.properties文件 多集群测试用例:eshelloword-spring-boot-starter\src\test\java\org\bboss\...

    bboss mvcdemo 下载地址

    4. **AOP(面向切面编程)**:BBoss MVCDemo支持AOP,可以实现如事务管理、日志记录、权限控制等功能,提高代码的复用性和可维护性。 5. **国际化与本地化**:框架内置了国际化和本地化支持,使得应用可以根据用户...

    企业级J2EE开源框架bboss

    1. **组件化开发**:BBoss支持模块化和组件化的开发模式,允许开发者根据项目需求选择必要的功能组件,避免了传统框架中“大而全”的问题,降低了系统的复杂度。 2. **数据库操作**:BBoss提供了便捷的数据访问层...

    由 bboss 开源的数据采集同步ETL工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能

    bboss-datatran 由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能。 同时也是一个高性能Elasticsearch orm 客户端,100%兼容es各个版本 ...

    基于Java的bboss开源框架设计源码

    bboss框架集成了AOP/iOC、MVC、持久化标签库、RPC、事件处理、Bean-XML序列化等多种功能。本项目基于bboss框架构建了数据采集ETL工具、流批一体化Stream工具、Elasticsearch客户端工具和WebSession共享框架等应用。

    bboss-elasticsearch开发环境搭建和开发入门视频教程.

    2. **插入数据**: 将业务数据插入到索引中,BBoss 提供了批量插入功能,可以高效处理大量数据。 3. **查询数据**: 构建查询条件,通过 BBoss API 发送请求并解析返回结果。 4. **更新和删除**: 更新已存在的文档,...

    bboss+es基本操作示例.zip

    通常,这些示例会展示如何初始化bboss客户端,如何构造和执行DSL查询,以及如何处理返回结果。 ```java // 初始化bboss客户端 ElasticsearchEntityMapping mapping = new ElasticsearchEntityMapping("my_index...

    springboot集成ElasticsearchBboss调用Elasticsearch.md

    springboot集成ElasticsearchBboss调用Elasticsearch的案例分享

    bboss会话共享培训文档分享

    bbosssession的架构及其特点,如跨容器支持、灵活可扩展的序列化机制、基于分布式缓存的实现,使得它能够在集群环境中实现高性能和高可用的会话管理。而其在部署和集成方面的便利性,则使得开发者能更快速地将其应用...

    bboss elasticsearch-5.7.8.rar

    3. `bboss-util-5.5.0.jar`和`bboss-persistent-5.5.0.jar`:这是BBoss框架的核心组件,提供了许多实用工具类和持久化操作支持,如数据库连接、事务管理等,为Elasticsearch的数据导入提供底层支持。 4. `...

    bboss-db-elasticsearch-tool-master_java_

    【bboss-db-elasticsearch-tool-master_java_】是一个Java ORM(对象关系映射)框架,它在功能上超越了MyBatis,提供了对多种数据库的广泛支持,包括MySQL、Oracle、PostgreSQL、SQLServer、DB2、DM以及MongoDB。...

    基于Java的bboss-datatran数据采集与流批一体化处理工具设计源码

    本bboss-datatran项目基于Java开发,包含591个文件,包括Java源代码、...系统实现了数据采集、数据清洗转换处理、数据入库以及数据指标统计计算的流批一体化处理功能,界面友好,功能完善,适合用于数据采集与处理。

    bboss-soa.jar

    官方版本,亲测可用

Global site tag (gtag.js) - Google Analytics