猜你喜欢
深入理解序列化与反序列化

深入理解序列化与反序列化

书籍作者:潘洪安 ISBN:9787121396885
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:3032
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

恰当的序列化方案不仅可以提高系统的通用性、强健性、安全性,优化系统性能,而且会让系统更加易于调试、便于扩展。《深入理解序列化与反序列化》从最基本的计算机编码知识入手,接着从内部机制、工作原理、核心类剖析、应用示例等方面对大数据、分布式架构中广泛应用的5种主流序列化技术――Java序列化、JSON、Thrift、Protocol Buffer和Avro进行深入讲解,最后从序列化后的数据大小(空间)、序列化耗时(时间)、反序列化耗时(时间)三个维度对5种序列化技术进行性能分析和综合对比,让读者对序列化技术有更全面和深入的理解,从而更好地应对不同场景下的序列化需求。

《深入理解序列化与反序列化》兼顾技术原理和技术应用,适合初级开发者、高级开发人员、架构师及技术专家使用。

作者简介

潘洪安

本硕均就读于西北大学,先后在百度、猎豹、快手等互联网公司从事大数据及后台开发工作。擅长大数据、分布式系统及后台高并发技术,喜欢探索技术原理,拥有技术发明专利6项。

编辑推荐
适读人群 :初级开发者、高级开发人员、架构师及技术专家

1.《深入理解序列化与反序列化》作者为资深互联网工程师,具有丰富的从业经验,先后在百度、猎豹、快手等互联网公司从事大数据及后台开发工作,擅长大数据、分布式系统及后台高并发技术,喜欢探索技术原理,了解众多开发人员工作中的难点和痛点。《深入理解序列化与反序列化》书深入浅出地讲解了互联网后台很重要的序列化技术,并对5种主流序列化技术进行性能分析和综合对比,能帮助开发人员更好地应对不同场景下的序列化需求。

2.阿里、腾讯、百度、快手、“中产之路”公众号、乐言科技等互联网公司众多业界大咖联袂力荐。


前言

推荐序一

随着互联网应用场景的逐步深化,轻客户端、重服务端成为各类复杂应用的必然之选。面对复杂的服务端应用,微服务成了越来越多技术公司的后端架构选择。各相关服务之间高效可靠的数据交互是后端技术人员必须考虑的因素。近年来,AI技术、大数据技术在越来越多领域的广泛应用,进一步提升了各项服务间数据交互的需求。序列化与反序列化技术作为数据交互的核心协议技术,从起初的网络传输、数据存储,向服务间实时交互、大数据支撑、跨语言方向持续演化。从早年的JDK内置序列化省心方案,适用于数据轻量级REST服务的JSON,跨语言IDL大行其道的Thrift、Protocol Buffer,到与大数据Hive、Pig等脚本系统高度适配的Avro,每个主流技术方案的诞生和演变都有着相应的背景,自然伴随着不同的侧重点和优劣势。作为一个技术选型者,只有对主流序列化方案的技术原理实现机制有全面而深入的了解,做到“知其所以然”,才能找到一个真正合适自己的应用场景的方案。

正因为序列化设计是开发者面临的一个日常问题,互联网上有不少与序列化相关的技术文章,但较难找到全面且系统覆盖该项技术的中文资料,有深度的博文往往侧重于一些单点技术讨论。要全面了解几个体系,也只剩下直接啃源码一条道了。本书作者将其在序列化领域的持续学习、积累及多年业界实战经验汇入本书,为读者提供了一条快速了解全貌进而深入探究该技术领域的路径。当然,对于要进一步了解核心技术实现的读者,源码还是得看的,本书起到了一个提纲挈领的作用,为读者划出重点、指明方向,大幅提升了看源码的效率,缩短了学习周期。

本书由浅入深,从基础的常用编码方法入手,阐述了大量编码类基本概念及知识,进而讲述主流的五大序列化技术方案,每项技术配以对源码实现机制的大量深入剖析,方便有兴趣深入了解的读者索引到源码进一步学习。每个技术章节结尾以深入浅出的方式给一个应用示例来收尾。当读者理解了一种主流技术方案的原理和实现机制后,在后续的学习过程中就会发现:主流方案的内部设计逻辑是共通的,也能够更清晰地看到方案间的差异点及如何取舍。本书最后一章从存储效率、编解码效率两个维度探讨了各个主流方案的差异。非常值得称道的是,在对比过程中,作者提供了11种测试数据集,给读者示范了如何严谨地进行技术选型。



上海乐言信息科技有限公司总经理

吴海华


推荐序二

这是一本把分布式系统核心处理流程中的序列化与反序列化环节描述得极为详尽的难得的好书。周末,我花了近两天时间把这本书看完。掩卷而思,作为一名兼具高校研究及传统转型企业、大型互联网企业混合从业经历的技术人员,我收获颇多。

本书作者从最原始的计算机编码基础、字符编码原理出发,循序渐进地引入序列化规范、各种具体的序列化技术并对其进行分析比较,最后根据自己丰富的分布式系统与大数据经验给出各种序列化技术在方案选型上面的指导原则。对于公司架构师而言,本书在选型方面的分析及背后的指导准则能够为最终决策提供充分的论据。

对于处于分布式浪潮中的技术人员而言,熟练掌握分布式体系中的各个底层模块的技术细节和原理是稳定系统、优化性能、快速定位故障和恢复系统所必备的。本书在序列化这个领域的理论和实践两个层面上的阐述都能很好地满足上述要求。尤其是在分布式架构中,I/O 处理和节点通信在完整链路中占较大比例,本书很好地描述了各种序列化技术的底层原理和实现细节,同时附上了丰富的代码示例。另外,本书也给出了很多关于实际序列化实现过程的中肯建议,有可以落地的设计开发规范,能够为团队进行方案选型、性能分析、编码规约等提供参考借鉴。

感谢洪安兄能够系统化地整理和分析现有的序列化技术,并花费大量精力将理论、实践进行有机整合,让本书兼具教科书、工具书的特点,希望本书能为业内架构师、程序员在进行序列化方案设计落地上提供帮助。


阿里巴巴架构师

吴一帆


前言

随着互联网技术的高速发展,涌现出了大数据、微服务等技术。这些技术背后都是分布式技术的高水平应用。分布式技术的核心之一便是服务或组件之间的数据交互。要在分布式系统中高效地交互数据,数据序列化与反序列化技术起着关键作用。将结构化的对象和扁平的二进制流进行相互转换,是序列化技术解决的核心问题。这个问题听起来简单,却耗费了几代技术人的心血。从JDK1.1提供序列化机制到盛行的Thrift、Protocol Buffer,序列化技术不断更替演进,其间出现过的序列化技术不少于20种。如今,那些令人尊敬的技术专家们仍未停止探索的脚步,这听起来确实令技术爱好者兴奋,毕竟技术可期。

序列化技术被广泛用于数据传输、数据存储中,不同业务场景的需求不尽相同,技术方案的侧重也不尽相同。要在众多序列化技术方案中选择一款适合应用场景的技术,要求技术选型者对序列化方案有深入且全面的了解。从实现机制到性能,从开发复杂度到快速应用,如何准确评估一款序列化技术是否适合应用场景?这无形中对开发人员提出了更高的要求。

互联网上有较多关于序列化技术应用的资料,但技术覆盖点不够全、重复点较多,未能较全面地梳理序列化技术知识体系。笔者也经历了这个技术学习过程,于是产生了一个想法:对现有的主流序列化技术进行较深入的梳理和解读,让读者能快速获取序列化技术体系的知识,深入理解各种序列化技术的实现原理、差异性及场景适用性。

本书兼顾技术原理和技术应用,适合初级开发者、高级开发人员、架构师及技术专家使用。为了帮助读者在阅读本书时达到事半功倍的目的,笔者给出两个学习建议:1)实践本书中的代码,将理解落地;2)结合源码和本书提供的原理阐述去理解技术内容。

感谢电子工业出版社编辑牛晓丽老师的严谨态度和辛勤付出,使得本书能够顺利完成。更感谢牛老师多次对日期的宽限,才使得笔者能安心写作。

感谢好友岳京杭,通过他的引荐,笔者才有机会和牛老师沟通并落实想法。

感谢工作以来帮助过我的领导和同事们,特别是在快手工作的两年,专家们的技术高度和对技术的态度,深深影响了我。

感谢业界的各位技术“大牛”不吝笔墨为本书撰写推荐序和推荐语。

最后,感谢家人和朋友们在本书写作过程中提供的支持和帮助。


目录

第一部分 技术基础
第1章 基础知识
1.1 计算机编码
1.1.1 比特、字节与字符
1.1.2 字节对齐
1.1.3 数字的表示
1.1.4 Big-Endian与Little-Endian
1.2 字符编码
1.2.1 字符集与字符编码
1.2.2 英文字符集与编码
1.2.3 中文字符集与编码
1.2.4 Unicode字符集与编码
1.3 Base64编码
1.3.1 编码规则
1.3.2 解码规则
1.3.3 索引表
1.3.4 编码与解码示例
1.3.5 Java应用示例
1.4 Varint编码
1.4.1 编码规则
1.4.2 Varint编码示例
1.4.3 Varint编码的不足
1.5 ZigZag编码
1.5.1 ZigZag编码流程
1.5.2 ZigZag编码算法实现
1.5.3 ZigZag反编码流程
1.5.4 ZigZag反编码算法实现
1.5.5 总结
1.6 初识序列化/反序列化
1.6.1 技术背景
1.6.2 技术特征
1.6.3 IDL序列化引擎

第二部分 序列化技术介绍
第2章 Java序列化
2.1 Java序列化入门
2.1.1 Java序列化实现方式
2.1.2 Java序列化应用
2.2 Java序列化核心类
2.2.1 Serializable
2.2.2 Externalizable
2.2.3 ObjectOutputStream
2.2.4 ObjectInputStream
2.3 Java序列化原理
2.3.1 基本类型的序列化流程
2.3.2 基本类型数据的序列化大小
2.3.3 对象类型的序列化流程
2.3.4 对象类型的序列化数据成分
2.4 Java序列化高级特性
2.4.1 transient关键字
2.4.2 static关键字
2.4.3 serialVersionUID
2.4.4 序列化/反序列化hook
2.4.5 数据校验
2.5 选择Serializable还是Externalizable
2.6 Java序列化安全
2.6.1 SealedObject
2.6.2 SignedObject
2.7 小结

第3章 JSON
3.1 JSON结构
3.1.1 JSON值类型
3.1.2 JSON语法
3.2 Gson的实现
3.2.1 Gson值类型
3.2.2 Gson核心类
3.2.3 Gson生成JSON原理
3.2.4 TypeAdapter
3.2.5 Gson解析JSON原理
3.2.6 Gson应用示例
3.2.7 Gson特性
3.3 开源工具库介绍
3.3.1 Fastjson
3.3.2 Jackson
3.3.3 开源工具库对比
3.4 小结

第4章 Thrift
4.1 Thrift数据类型
4.1.1 基本数据类型
4.1.2 复杂数据类型
4.2 Thrift文件
4.2.1 Thrift规范
4.2.2 名字空间
4.2.3 include关键字
4.2.4 const关键字
4.3 Thrift文件示例
4.4 Thrift生成的数据结构
4.4.1 enum生成Java代码
4.4.2 struct生成Java代码
4.5 Thrift序列化原理
4.5.1 序列化/反序列化核心类
4.5.2 序列化流程
4.5.3 反序列化流程
4.6 TProtocol的实现
4.6.1 TBinaryProtocol
4.6.2 TCompactProtocol
4.6.3 TJSONProtocol
4.6.4 TSimpleJSONProtocol
4.6.5 TTupleProtocol
4.7 Java Serializable读写Thrift对象
4.8 TTransport
4.8.1 内存型TTransport
4.8.2 文件型TTransport
4.8.3 特定功能型TTransport
4.8.4 网络型TTransport
4.8.5 总结
4.9 小结

第5章 Protocol Buffer
5.1 数据类型
5.1.1 基本数据类型
5.1.2 复杂数据类型
5.2 proto文件
5.2.1 proto规范
5.2.2 import关键字
5.3 proto文件示例
5.4 proto文件生成代码
5.4.1 手动执行protoc命令行
5.4.2 Maven集成方式
5.4.3 proto应用示例
5.4.4 proto生成的代码文件
5.5 ProtoBuf生成Java对象
5.5.1 enum定义生成的Java对象
5.5.2 message定义生成的Java对象
5.6 Descriptor机制
5.6.1 FileDescriptor
5.6.2 PackageDescriptor
5.6.3 Descriptor
5.6.4 FieldDescriptor
5.6.5 OneOfDescriptor
5.6.6 EnumDescriptor和EnumValueDescriptor
5.6.7 ServiceDescriptor和MethodDescriptor
5.6.8 Descriptor和DescriptorProto
5.6.9 Descriptor文件
5.7 ProtoBuf Builder机制
5.8 ProtoBuf数据序列化
5.8.1 数据序列化大小
5.8.2 数据序列化实现方式
5.8.3 ProtoBuf序列化流程
5.8.4 ProtoBuf序列化应用示例
5.9 ProtoBuf数据反序列化
5.10ProtoBuf高级特性
5.10.1 extension
5.10.2 oneof
5.10.3 Any
5.11 ProtoBuf开源组件
5.11.1 protostuff
5.11.2 Cap‘n Proto
5.12小结

第6章 Avro
6.1 Avro数据Schema
6.1.1 Avro数据类型
6.1.2 Avro Schema文件定义
6.1.3 Avro Schema文件的生效模式
6.2 Avro生成Java代码
6.3 Avro序列化核心类
6.3.1 Schema
6.3.2 GenericData
6.3.3 Encoder
6.3.4 Decoder
6.3.5 DatumWriter
6.4 Avro序列化过程
6.5 小结 195

第三部分 深入理解序列化技术
第7章 序列化技术性能
7.1 序列化技术特征对比
7.2 序列化技术性能对比
7.2.1 对各类型数据的处理
7.2.2 序列化数据大小对比
7.2.3 序列化耗时对比
7.2.4 反序列化耗时对比
7.2.5 性能对比结论
7.3 自定义IDL序列化工具
7.4 小结

短评

有很多干货,值得一读

2020-11-09 23:23:41

,,,,,,,,,,

2020-10-28 08:50:26

还没看

2020-11-08 21:07:12

书不错的,一直在购买的

2020-11-06 12:18:40

和同学组团购买,对于后台开发来说,很实用。能快速了解序列化体系,后续也能当做工具书使用。

2020-10-28 13:58:13

产品特色