The invention discloses a serialization and deserialization method, which includes: traversing all source codes in a preset project in response to a serialization instruction, obtaining the types of all objects in the source codes, serializing different types of objects according to preset first rules, and according to the preset unique identifier and the object when the object is a preset type. Mapping relationships are serialized; different types of fields are de-serialized according to the preset second rule in response to the de-serialization instructions; where, when a unique identifier is read out, the corresponding types of fields are de-serialized according to the mapping relationship between the unique identifier and the object. The invention can effectively solve the problem that the existing serialization technology can only serialize tree data, and realize automatic serialization of graph data.
【技术实现步骤摘要】
序列化和反序列化方法及装置
本专利技术涉及计算机领域,尤其涉及一种序列化和反序列化方法及装置。
技术介绍
数据序列化技术广泛应用于各种数据交互场景.例如,网络传输,数据存储,配置文件的读写等。不同序列化技术的应用场景也有所区别,现有技术中的序列化方法可主要有以下几种类型.1.json序列化:该技术调用一个函数就可以直接序列化一个结构体A。该技术采用反射的方法,遍历结构体A的所有字段,并进行序列化.优点是不用定义额外的数据结构体B就可以自动的序列化。缺点是由于采用反射实现,速度慢,并且只能序列化公有字段(私有字段是不能被反射代码访问的)。另外,json是明文,序列化数据量较大。该技术比较适合与数据文件的读写以及编辑器之间传递文件或数据等对于性能要求不高的地方。2.protobuf序列化:该技术定义了一种描述文件,用于描述结构体的结构.假设我们需要序列化结构体A.我们首先需要写好描述文件,用于描述结构体A,并用protobuf工具生成该描述文件对应的.go文件。生成的go代码中会包含一个结构体B。我们需要手工将待序列化的结构体A的字段一一赋值到结构体B之中.该技术的优点是速度快,并且兼容性好,缺点是需要手写序列化代码。该技术比较适合于网络传输以及数据存储等对于性能和兼容性要求都比较高的地方。3.gob序列化:该方案是go语言中为了提高速度以及序列化能力所实现的特殊的序列化解决方案.该方案同样采用反射实现,特点是可以比json序列化的类型更多,可以序列化interface字段(任意类型),并且序列化数据量较小缺点是序列化interface时需要手动注册每个可能对 ...
【技术保护点】
1.一种序列化和反序列化方法,其特征在于,包括:响应于序列化指令,遍历预设工程内的所有源代码,获取所述源代码中所有对象的类型,根据预设的第一规则对不同类型的对象进行序列化;其中,当所述对象为预设的类型时,根据预设的唯一标识符和所述对象的映射关系进行序列化;响应于反序列化指令,根据预设的第二规则反序列化不同类型的字段;其中,当读出唯一标识符时,根据所述唯一标识符和对象的映射关系对相应类型的字段进行反序列化。
【技术特征摘要】
1.一种序列化和反序列化方法,其特征在于,包括:响应于序列化指令,遍历预设工程内的所有源代码,获取所述源代码中所有对象的类型,根据预设的第一规则对不同类型的对象进行序列化;其中,当所述对象为预设的类型时,根据预设的唯一标识符和所述对象的映射关系进行序列化;响应于反序列化指令,根据预设的第二规则反序列化不同类型的字段;其中,当读出唯一标识符时,根据所述唯一标识符和对象的映射关系对相应类型的字段进行反序列化。2.如权利要求1所述的序列化和反序列化方法,其特征在于,根据预设的第一规则对不同类型的对象进行序列化前还包括步骤:对所述源代码中所有对象的类型进行筛选,去除函数类型和channel类型的对象。3.如权利要求1所述的序列化和反序列化方法,其特征在于,所述根据预设的第一规则对不同类型的对象进行序列化具体包括:当所述对象为固定字节大小的基础类型时,根据预设的编码进行序列化;当所述对象为不定字节大小的基础类型时,先序列化该对象的长度,再序列化该对象的内容;当所述对象为结构体类型时,调用预设的第一序列化函数进行序列化;当所述对象为数组类型时,遍历该数组并对该数组内的每一元素进行序列化。4.如权利要求3所述的序列化和反序列化方法,其特征在于,所述根据预设的第二规则反序列化不同类型的字段具体包括:当判断待反序列化的字段为固定字节大小的基础类型时,根据预设的编码进行反序列化;当判断待反序列化的字段为不定字节大小的基础类型时,先读出该基础类型的长度,再根据该基础类型的长度读出相应的内容;当判断待反序列化的字段为结构体类型时,调用预设的第一反序列化函数进行序列化;当判断待反序列化的字段为数组类型时,待反序列化的字段内的每一元素进行反序列化。5.如权利要求4所述的序列化和反序列化方法,其特征在于,当所述对象为预设的类型时,根据预设的唯一标识符和所述对象的映射关系进行序列化具体包括:当所述对象为指针类型时,判断预设的集合内是否存在该指针,当所述集合内不存在该指针时,生成该指针的唯一标识符,序列化所述唯一标识符和该指针指向的类型;当所述集合内存在该指针时,序列化该指针所对应的唯一标识符;当所述对象为slice类型时,判断预设的集合内是否存在该slice,当所述集合内不存在该slice时,序列化所述唯一标识符和该slice的长度;当所述集合内存在该slice时,序列化该slice所对应的唯一标识符;当所述对象为map类型时,判断预设的集合内是否存在该map,当所述集合内不存在该map时,序列化所述唯一标识符、该map的长度和该map中的每一元素;当所述集合内存在该map时,序列化该map所对应的唯一标识符;当所述对象为interface类型时,根据预设的第二序列化函数对该interface的类型进行判断,基于所述interface的类型对该interface对应的唯一标...
【专利技术属性】
技术研发人员:徐波,
申请(专利权)人:广州多益网络股份有限公司,广东利为网络科技有限公司,多益网络有限公司,
类型:发明
国别省市:广东,44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。