他在应用上还是很广泛的,无论是前台 Web 用 Ajax 调用、用磁盘存储文本类型的数据,还是基于 HTTP 协议的 RPC 框架通信,都会选择 JSON 格式。
缺点:1:JSON进行序列化的额外空间开销比较大,对于大数据量服务就意味着需要巨大的内存和磁盘开销2:JSON没有类型,但像Java这种强类型语言,需要通过反射统一解决,所以性能不会太好优点:1:简洁明了3:HessianHessian 是动态类型、二进制、紧凑的,并且可跨语言移植的一种序列化框架。
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:ProtobufProtobuf 是 Google 公司内部的混合语言数据标准,是一种轻便、高效的结构化数据存储格式,可以用于结构化数据序列化,支持 Java、Python、C++、Go 等语言。
Protobuf使用的时候需要定义 IDL(Interface description language),然后使用不同语言的 IDL编译器,生成序列化工具类缺点:1:为了提高性能,protobuf采用了二进制格式进行编码。
这直接导致了可读性差2:对于具有反射和动态语言来讲,用起来比较费劲优点:1:高效2:支持多种语言3:支持向前,向后兼容5:ThriftThrift是Facebook于2007年开发的跨语言的rpc服框架,提供多语言的编译功能,并提供多种服务器工作模式,用户通过Thrift的IDL(接口定义语言)来描述接口函数及数据类型,然后通过Thrift的编译环境生成各种语言类型的接口文件,用户可以根据自己的需要采用不同的语言开发客户端代码和服务器端代码。
缺点:1:没有官方文档2:Thrift序列化二进制不可读,调试困难3:buf fix 和更新不积极,维护成本过高4:RPC 在 0.6.1 升级到 0.7.0 是不兼容的优点:1:特性丰富2:性能不错3:有很多开源项目的周边支持 都是 thrift有志者、事竟成,破釜沉舟,百二秦关终属楚; 苦心人、天不负,卧薪尝胆,三千越甲可吞吴. 加油吧,致每个正在奋斗路上的你!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)