当前位置:首页 > 网络技术 > 序列化工具有哪些(序列化和反序列化工具)(序列化工具类)

序列化工具有哪些(序列化和反序列化工具)(序列化工具类)

longge2022-03-24 01:48:07网络技术74

1:为什么要序列化

网络传输的数据都必须是二进制数据,但是在java中都是对象,是没有办法在网络中进行传输的,所以就需要对Java对象进行序列化,而且这个要求这个转换算法是可逆的,不然要是不可逆那鬼知道你传过来的是个什么东西

2:Java原生序列化

只要让类实现 Serializable 接口就行,序列化具体的实现是由ObjectOutputStream和ObjectInputStream来实现的

缺点:

  • 1:序列化码流太大
  • 2:序列化效率低
  • 3:无法跨语言

优点:

  • 1:简单

3:JSON序列化

JSON 可能是我们最熟悉的一种序列化格式了,JSON 是典型的 Key-Value 方式,没有数据类型,是一种文本型序列化框架,JSON 的具体格式和特性,网上相关的资料非常多,这里就不再介绍了。他在应用上还是很广泛的,无论是前台 Web 用 Ajax 调用、用磁盘存储文本类型的数据,还是基于 HTTP 协议的 RPC 框架通信,都会选择 JSON 格式。

缺点:

  • 1:JSON进行序列化的额外空间开销比较大,对于大数据量服务就意味着需要巨大的内存和磁盘开销
  • 2:JSON没有类型,但像Java这种强类型语言,需要通过反射统一解决,所以性能不会太好

优点:

  • 1:简洁明了

3:Hessian

Hessian 是动态类型、二进制、紧凑的,并且可跨语言移植的一种序列化框架。Hessian 协议要比 JDK、JSON 更加紧凑,性能上要比 JDK、JSON 序列化高效很多,而且生成的字节数也更小

Student student = new Student(); 
student.setNo(101);  
student.setName("HESSIAN"); 
//把student对象转化为byte数组
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
Hessian2Output output = new Hessian2Output(bos); 
output.writeObject(student); 
output.flushBuffer(); 
byte[] data = bos.toByteArray(); 
bos.close(); 
//把刚才序列化出来的byte数组转化为student对象
ByteArrayInputStream bis = new ByteArrayInputStream(data); 
Hessian2Input input = new Hessian2Input(bis); 
Student deStudent = (Student) input.readObject(); 
input.close(); 
System.out.println(deStudent);

缺点:

  • 1:官方版本对Java里面一些常见对象的类型不支持,
  • 比如LinkedHashMap、LinkedHashSet 等,但是可以通过扩展CollectionDeserializer 类修复,
  • Locale 类,可以通过扩展 ContextSerializerFactory 类修复;
  • Byte/Short 反序列化的时候变成 Integer

优点:

  • 1:相对于JDk,JSON,更加高效,生成的字节数更小
  • 2:有非常好的兼容性和稳定性

4:Protobuf

Protobuf 是 Google 公司内部的混合语言数据标准,是一种轻便、高效的结构化数据存储格式,可以用于结构化数据序列化,支持 Java、Python、C++、Go 等语言。Protobuf使用的时候需要定义 IDL(Interface description language),然后使用不同语言的 IDL编译器,生成序列化工具类

缺点:

  • 1:为了提高性能,protobuf采用了二进制格式进行编码。这直接导致了可读性差
  • 2:对于具有反射和动态语言来讲,用起来比较费劲

优点:

  • 1:高效
  • 2:支持多种语言
  • 3:支持向前,向后兼容

5:Thrift

Thrift是Facebook于2007年开发的跨语言的rpc服框架,提供多语言的编译功能,并提供多种服务器工作模式,用户通过Thrift的IDL(接口定义语言)来描述接口函数及数据类型,然后通过Thrift的编译环境生成各种语言类型的接口文件,用户可以根据自己的需要采用不同的语言开发客户端代码和服务器端代码。

缺点:

  • 1:没有官方文档
  • 2:Thrift序列化二进制不可读,调试困难
  • 3:buf fix 和更新不积极,维护成本过高
  • 4:RPC 在 0.6.1 升级到 0.7.0 是不兼容的

优点:

  • 1:特性丰富
  • 2:性能不错
  • 3:有很多开源项目的周边支持 都是 thrift

有志者、事竟成,破釜沉舟,百二秦关终属楚; 苦心人、天不负,卧薪尝胆,三千越甲可吞吴. 加油吧,致每个正在奋斗路上的你!!!

免责声明
本站部分资源来源于互联网 如有侵权 请联系站长删除
龙哥网是优质的互联网科技创业资源_行业项目分享_网络知识引流变现方法的平台为广大网友提供学习互联网相关知识_内容变现的方法。#转载请注明出处!

“序列化工具有哪些(序列化和反序列化工具)(序列化工具类)” 的相关文章

CSS文本居中并且两端对齐的样式属性text-align-last(css中文本居中对齐)

CSS文本居中并且两端对齐的样式属性text-align-last(css中文本居中对齐)

CSS中 text-align:justify; 实现文本两端对齐,最后一行居左;text-align:center; 实现文本居中显示,两端不对齐。 由于 CSS 一个选择器不能使用相同的两...

jquery表单验证插件submitform_validator.js报错误script:[websiteurl]的Error解决方法

jquery表单验证插件submitform_validator.js报错误script:[websiteurl]的Error解决方法

jquery验证表单插件出现错误提示,无法提交表单,错误提示如下: Error: Syntax error, unrecognized expression: script:[websi...

jQuery slice()方法获取指定索引范围内的元素

jQuery slice()方法获取指定索引范围内的元素

slice() 把匹配元素集合缩减为指定的指数范围的子集。模仿了 JavaScript 数组对象的 .slice() 方法。它所模仿的特性之一是向 start 或 end 参数传递负数的能力。如果提...

浪子Pay-码支付即时到账系统源码(码支付即时到账支付源码)

浪子Pay-码支付即时到账系统源码(码支付即时到账支付源码)

浪子Pay-码支付即时到账系统 php版本要求: 5.6-7.4 注意!!!! 大家别把自己跟源码跟云端信息发出来 你们下载的每个源码里边的授权码特征码都不一样 如果你一旦泄露源码跟云端账号密码出去...

魔鬼交际学《沟通训练营二期》(人际关系训练营主要内容)

魔鬼交际学《沟通训练营二期》(人际关系训练营主要内容)

课程介绍本课程会进行沟通心理及原理方法的讲解,同时,由于本课程的目标是提升学员的实际沟通能力,因此本课的特色同时也是本课的重点,那就是针对学员的真实案例进行分析和场景训练。学习地址百度:https:/...

改变你未来九节运动科学课程

改变你未来九节运动科学课程

课程介绍运动科学将理论与运动实践相结合,主要研究体育运动与人的机体的相互关系及其规律,涉及运动学、生物学、养生学、医学等学科,在运动训练基地、运动保健康复中心等进行运动健身与营养指导、运动员身体机能诊...