序列化浅析

/ Java / 0 条评论 / 1602浏览
Java(Protobuf,xml,fastjson,)
Transient 关键字的作用是控制变量的序列化
特点
1、Java序列化只是针对对象的状态进行保存,至于对象中的方法,序列化不关心。
2、当一个父类实现了序列化,那么子类会自动实现序列化,不需要显示实现序列化接口 。
3、当一个对象的实例变量引用了其他对象,序列化这个对象的时候会自动把引用的对象也进行序列化(实现深度克隆)。
4、当某个字段被申明为transient后,默认的序列化机制会忽略这个字段。
5、被申明为transient 的字段,如果需要序列化,可以添加两个私有方法:writeObject 和 readObject
选择
1、序列化空间开销,也就是序列化产生的结果大小,这个影响到传输的性能。
2、序列化过程中消耗的时长,序列化消耗时间过长影响到业务的响应时间。
3、序列化协议是否支持跨平台,跨语言。因为现在的微服务架构更加灵活,如果存在异构系统通信需求,那么这个跨语言是必须要考虑的。
4、可扩展性/兼容性,在实际业务开发中,系统往往需要随着需求的快速迭代来实现快速更新, 这就要求我们采用的序列化协议基于良好的可扩展性/兼容性,比如在现有的序列化数据结构中新增一个业务字段,不会影响到现有的服务等。
5、技术的流行程度,越流行的技术意味着使用的公司多,技术解决方案也相对成熟。
6、要考虑学习成本,学习难度和易用性等方面问题。 比如Protobuf虽然说性能非常高,但是相应的也需要一定的学习成本。