- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
RPC 专栏】深入理解 RPC 之序列化篇
Kryo
年前,笔者刚刚接触 RPC 框架,从单体式应用向分
布式应用的变革无疑是让人兴奋的,同时也对 RPC 背后到 底做了哪些工作产生了兴趣,但其底层的设计对新手而言并 不是很友好,其涉及的一些常用技术点都有一定的门槛。如 传输层常常使用的 netty ,之前完全没听过, 想要学习它, 需 要掌握前置知识点nio ;协议层,包括了很多自定义的协议, 而每个 RPC 框架的实现都有差异; 代理层的动态代理技术, 如 jdk 动态代理,虽然实战经验不多,但至少还算会用,而
cglib 则又有一个盲区; 序列化层倒还算是众多层次中相对简 单的一环,但 RPC 为了追求可扩展性,性能等诸多因素, 通常会支持多种序列化方式以供使用者插拔使用,一些常用 的序列化方案 hessian ,kryo ,Protobuf 又得熟知 ... 这个系列 打算就 RPC 框架涉及到的一些知识点进行探讨,本篇先从 序列化层的一种选择 --kryo 开始进行介绍。序列化概述大白
话介绍下 RPC 中序列化的概念,可以简单理解为对象 --gt;
字节的过程,同理,反序列化则是相反的过程。为什么需要 序列化?因为网络传输只认字节。所以互信的过程依赖于序 列化。 有人会问, FastJson 转换成字符串算不算序列化?对 象持久化到数据库算不算序列化?没必要较真,广义上理解 即可。 JDK 序列化可能你没用过 kryo ,没用过 hessian ,但你一定用过 jdk 序列化。我最早接触 jdk 序列化,是在大 的 JAVA 大作业中,《 XX 管理系统》需要把对象保存到文件 中(那时还没学数据库) ,jdk 原生支持的序列化方式用起来 也很方便。 class Student implements
Serializable{private String name; } class
Serializable{
Main{ public static void main(String[] args) throws
Exception{// create a Student
Exception{
// create a Student
Student st =
new Student(kirito);file// serialize the st to student.db
new Student(kirito);
file
ObjectOutputStream oos = new
ObjectOutputStream(new FileOutputStream(student.db));
oos.writeObject(st);oos.close();//
oos.writeObject(st);
oos.close();
//
deserialize the object from student.db
Student kirito =ObjectInputStream ois =
Student kirito =
FileInputStream(student.db));
(Student) ois.readObject();ois.close();//
(Student) ois.readObject();
ois.close();
//
assert assert kirito.equals(kirito.getName());
Student 实体类需要实现 Serializable 接口,以告知其可被序 列化。序列化协议的选择通常有下列一些常用的指标:通用 性。是否只能用于 java 间序列化 /反序列化,是否跨语言,
跨平台。性能。分为空间开销和时间开销。序列化后的数据
般用于存储或网络传输,其大小是很重要的一个参数;解 析的时间也影响了序列化协议的选择,如今的系统都在追求
input.close(); assert
input.close(); assert
极致的性能。可扩展性。系统升级不可避免,某一实体的属 性变更,会不会导致反序列化异常,也应该纳入序列化协议 的考量范围。 易用性。 API 使用是否复杂, 会影响开发效率。
容易用的模型通常性能不好,性能好的模型通常用起来都比 较麻烦。显然, JDK 序列化属于前者。我们不过多介绍它,
直接引入今天的主角 kryo 作为它的替代品。 Kryo 入门引入
依赖com.esotericsoftwarekryo
依赖
com.esotericsoftware
kryo
4.0.1由于其底层依赖于 ASM 技术,与 Spring 等框架可 能会发生 ASM 依赖的版本冲突(文档中表示这个冲突还挺
4.0.1
容易出现)所以提供了另外一个依赖以供解决此问题
您可能关注的文档
- 《生命生命》课文原文-word文档.docx
- 《电信信息技术与业务》综合练习.docx
- 《疑难病证思辨录》读后.docx
- 《白岩松的人生哲学》.docx
- 《百科全说》湖南卫视全集.docx
- 《红楼梦》中袭人的形象研究.docx
- 《美丽心灵》的人文情怀.docx
- 《股神:殷保华》公式原代码.docx
- 《臧克家抒情散文选》责编记.docx
- 《花样少男少女》1~44集全.docx
- 2025年成都市玩偶生产荧光涂鸦互动玩偶开发可行性研究报告.docx
- 2025年成都市海绵生产用于体育馆室外运动场地透水改造可行性研究报告.docx
- 2025年天津市体操鞋企业团建运动应用报告.docx
- 2025年上海市溶洞极限运动(速降)场地开发可行性研究报告.docx
- 2025年上海市涵洞工程施工技术应用可行性研究报告.docx
- 2025年上海市体育场馆设施扎带安全防护可行性研究报告.docx
- 2025年上海市牦牛育肥产业园区建设可行性研究报告.docx
- 2025年旅拍宠物陪伴拍摄项目可行性研究报告.docx
- 2025年上海市进口食品节庆主题快闪店可行性研究报告.docx
- 2025年上海市洗选厂尾矿综合利用产业化可行性研究报告.docx
文档评论(0)