何方社区
  • -

824

49 网友分享了链接

了解哪几种序列化协议?

2020-08-23 06:14:47

序列化(编码)是将对象序列化为二进制形式(字节数组),主要用于网络传输、数据持久 化等;而反序列化(解码)则是将从网络、磁盘等读取的字节数组还原成原始对象,主要 用于网络传输对象的解码,以便完成远程调用。 影响序列化性能的关键因素:序列化后的码流大小(网络带宽的占用)、序列化的性能 (CPU 资源占用);是否支持跨语言(异构系统的对接和开发语言切换)。 Java 默认提供的序列化:无法跨语言、序列化后的码流太大、序列化的性能差 XML,优点:人机可读性好,可指定元素或特性的名称。缺点:序列化数据只包含数据本 身以及类的结构,不包括类型标识和程序集信息;只能序列化公共属性和字段;不能序列 化方法;文件庞大,文件格式复杂,传输占带宽。适用场景:当做配置文件存储数据,实 时数据转换。 JSON,是一种轻量级的数据交换格式,优点:兼容性高、数据格式比较简单,易于读写、 序列化后数据较小,可扩展性好,兼容性好、与 XML 相比,其协议比较简单,解析速度比 较快。缺点:数据的描述性比 XML 差、不适合性能要求为 ms 级别的情况、额外空间开销 比较大。适用场景(可替代XML):跨防火墙访问、可调式性要求高、基于 Web browser 的 Ajax 请求、传输数据量相对小,实时性要求相对低(例如秒级别)的服务。 Fastjson,采用一种“假定有序快速匹配”的算法。优点:接口简单易用、目前 java 语言中 最快的 json 库。缺点:过于注重快,而偏离了“标准”及功能性、代码质量不高,文档不 全。适用场景:协议交互、Web 输出、Android 客户端 Thrift,不仅是序列化协议,还是一个 RPC 框架。优点:序列化后的体积小, 速度快、支持 多种语言和丰富的数据类型、对于数据字段的增删具有较强的兼容性、支持二进制压缩编 码。缺点:使用者较少、跨防火墙访问时,不安全、不具有可读性,调试代码时相对困 难、不能与其他传输层协议共同使用(例如 HTTP)、无法支持向持久层直接读写数据,即 不适合做数据持久化序列化协议。适用场景:分布式系统的 RPC 解决方案 Avro,Hadoop 的一个子项目,解决了 JSON 的冗长和没有 IDL 的问题。优点:支持丰富的 数据类型、简单的动态语言结合功能、具有自我描述属性、提高了数据解析速度、快速可 压缩的二进制数据形式、可以实现远程过程调用 RPC、支持跨编程语言实现。缺点:对于 习惯于静态类型语言的用户不直观。适用场景:在 Hadoop 中做 Hive、Pig 和 MapReduce 的持久化数据格式。 Protobuf,将数据结构以.proto 文件进行描述,通过代码生成工具可以生成对应数据结构的 POJO 对象和 Protobuf 相关的方法和属性。优点:序列化后码流小,性能高、结构化数据存 储格式(XML JSON 等)、通过标识字段的顺序,可以实现协议的前向兼容、结构化的文档 更容易管理和维护。缺点:需要依赖于工具生成代码、支持的语言相对较少,官方只支持 Java 、C++ 、python。适用场景:对性能要求高的 RPC 调用、具有良好的跨防火墙的访问 属性、适合应用层对象的持久化 其它 protostuff 基于 protobuf 协议,但不需要配置 proto 文件,直接导包即可 Jboss marshaling 可以直接序列化 java 类, 无须实 java.io.Serializable 接口 Message pack 一个高效的二进制序列化格式 Hessian 采用二进制协议的轻量级 remoting onhttp 工具 kryo 基于 protobuf 协议,只支持 java 语言,需要注册(Registration),然后序列化 (Output),反序列化(Input)

    文章最多点击量
  1. 劝学-先秦-荀子 0
  2. MySQL8如何设置表名大小写不敏感? 1
  3. quartz 表名应该大写还是小写 0
  4. 一个爬取了TikTok 20万+妹子视频的Github开源库包括Web、Api 5
  5. CentOS8下安装mysql8 10
  6. Nginx启动报错:could not open error log file: open() "/usr/local/nginx/logs/error.log" failed 3
  7. mysql修改密码 4
  8. mysql如果没有就插入,如果有就更新 1
  9. BIO、NIO 和 AIO 的区别? 0
  10. 记一次linux ssh密钥登陆失败的解决方式 2
  11. 搭建Git服务器 1
  12. 如何在CentOS中开启Swap 5
  13. 《失控》图书推荐 3
  14. Netty 的高性能表现在哪些方面? 0
  15. Netty 的零拷贝实现? 3
  16. 如何选择序列化协议? 1
  17. 了解哪几种序列化协议? 1
  18. Netty 的线程模型? 0
  19. Netty 的特点? 4
  20. NIO 的组成? 0
  21. XssFilter Jsoup 富文本过滤后 @RequestBody 解析json 失败 4
  22. 不能反向序列化 0
  23. 网站待优化 0
  24. Kafka面试题 2
  25. nacos配置管理 4
  26. 前端js防抖 3
  27. Docker学习0001 40
  28. 待整理todo 1
  29. shell重启java应用 0
  30. 调整 ubuntu swap 大小 2
使用本站请开启cookie和JavaScript