序列化和反序列化优化构想

序列化

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。(该解释来自百度百科)

序列化应用场景

目前各大互联网公司内部服务调用都采用的RPC架构,采用微服务远程调用为开发带来了极大的便捷。RPC架构的核心就是A服务器通过远程协议调用B服务器上的服务。其中A服务器通过协议调用B服务器上的服务时,传给B服务器的参数可能是int类型,可能是String类型,也可能是对象类型,那我们的方法参数通过协议从A服务器传到B服务器的过程中就用到了我们的序列化和反序列化技术。

我们的协议只能传送二进制的字符流,不可能把对象穿过去,所以就产生了序列化技术,而服务器收到字符流解析成对象的过程就是反序列化。

序列化和反序列化中可优化的点

技术思想就是上面提到的,其中有一些可以优化的点。以上面的例子继续介绍,A服务器把对象序列化成字符流,传到B服务器后,B服务器要通过反射拿到对象,然后通过遍历获得类属性。这其中的效率其实是比较低的。因为我们传送的参数可能只有两个或者一个参数,但我们反序列化的时候还是要通过反射获得所有域,遍历获取。

序列化和反序列化优化构想

上面已经提到可优化的点,关于这个点有一些优化构想,上面的问题主要是反射获得对象然后获得属性的效率问题,我们的优化点就这于提升序列化和反序列化的效率。

构想思路:自定义一个域注解和一个序列化类注解,在需要序列化的类上加上序列化注解,在域上声明域注解,在项目启动时,自动扫描带有序列化注解的类,为其生成一个伴生类。所谓伴生类和原类的区别在于伴生类的所有域信息采用一个buffer存储,A服务器传送时也通过伴生类传送,B服务器解析获取域信息就从buffer中直接取相应位置的信息。

优点:这个构想的本质就是省去了通过反射遍历获取域信息的操作。只在编译时通过反射生成伴生类。一个类的域可能有很多,占用的内存空间大小不等,通过反射获取的话效率是比较低的。

进步解析:伴生类中只有一个域就是buffer字符串以及和本类一样的方法,方法实现就是获取相应位置的域信息。这个方法的本质思想,就是相当于自己定义了一个规则,传数据按着这个规则传,解析获取数据就按着这个规则解析获取。效率比通过反射获得类再去获取类信息提升几倍到几十倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值