更多内容请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com【本期看点】JSON/XML之外的序列化技术的诞生。多年来序列化技术的发展时间表。不同序列化技术应用场景的图表概述。比较不同序列化技术的位串中包含的信息量的图表。JSON/XML以外的序列化技术的诞生JSON/XML的缺点众所周知,JSON/XML具有非常强大的表现力和跨平台的序列化技术,使用非常方便,没有任何约束。然而,随着各平台数据量的暴涨,便捷、免费的JSON/XML序列化技术也显现出不少性能上的不足,而这些问题恰好不容忽视。JSON和XML属于文本序列化规范,都是用字符串来表示所有的数据,但是一些非字符数据如浮点数、布尔值、结构体等,为了解析出这些非字符数据,序列化过程中会描述数据类型,最终生成的字面量表达式会占用大量额外的存储空间。面对庞大的数据处理,在这种序列化规范下,系统甚至可能会溢出。序列化技术的蓬勃发展,正是在刚才提到的序列化瓶颈之下。程序员如何妥协?就在JSON之后,越来越多的序列化技术出现在了我们的视野中。比如上一期提到的几乎没有解析时间的Flatbuffers,还有分布式计算中经常用到的MicrosoftBond、Cap'sProto等。序列化技术历年的发展时间表从21世纪初就可以看出,因为世界在不断网络化、信息化,对数据传输过程的要求越来越高,序列化技术也在不断迭代人们发明的。序列化技术也从单纯的字符分隔值CSV文件,到1996年,在SGML的基础上,简化了一个规范,提出了一种名为XML(ExtensibleMarkupLanguage)的标记语言。2006年,至今仍广受人们喜爱的JSON也出现在了我们的视野中。随着技术的创新和发展,不同的场景也需要序列化技术。在过去的15年里,许多新的序列化技术不断涌现出来。不同序列化技术的应用场景一张图概览在上图中,我们可以直观的看到不同序列化技术的应用场景。或许这些技术也可以应用到其他的场景中,但是相对于其他的序列化技术,他们更多的是用在特定的场景中。从20世纪80年代电子表格的出现开始,CSV为人们所熟知,然后ASN.1同时被应用到电信中。随之而来的是象征着互联网时代正式开始的Web应用。从1996年开始采用XML,然后2006年开始流行JSON,一直沿用至今。在软件架构中,使用了YAML和TOML。近年来,ApacheAvro被用于大数据;数据库技术也引入了序列化技术BSON;未来大势所趋的物联网,就是用CBOR;再到我们现在疯狂的网游,用的是FlatBuffers,后者是在FlatBuffers的基础上创新的,除了FlexBUffers兼容性更好。当然,这也离不开嘈杂的分布式计算。该场景使用的序列化技术也在不断迭代,包括ProtocolBuffers、ApacheThrift、MessagePack、Cap'nProto、MicrosoftBond等。一张图比较了不同序列化技术的比特串所包含的信息量。上图展示了使用不同的序列化技术分别对同一个数据进行序列化,然后对位串中的信息量进行排序。(越往右,信息量越小)。我们可以根据上图直观的看到序列化后的位串包含的信息量,来对比schema-free和schema-driven的序列化规范。最左边的处理方式将信息量最大的位串序列化,是无模式序列化规范(Schema-lessSerializationSpecifications),如BSON、Smile、FlexBuffers等,因为原始数据和信息量大对其结构的描述。最右边的信息量最少,比如ASN.1,因为他们在规范中事先约定了很多结构信息,所以不需要写入到序列化的位串中。更多信息请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com
