当前位置: 首页 > 专利查询>南京大学专利>正文

一种反序列化代码生成方法及装置制造方法及图纸

技术编号:39007036 阅读:22 留言:0更新日期:2023-10-07 10:38
本发明专利技术公开了一种反序列化代码生成方法及装置,适用于Python语言。具体方案为:获取被序列化对象,抽取其上下文信息;根据上下文信息对被序列化对象进行依赖分析,获取所有依赖对象和依赖关系;分析所述依赖对象的对象类型和所属模块,生成创建对应对象的代码语句;将所述代码语句根据所述依赖关系排序,生成反序列化代码。通过本发明专利技术的技术方案,可基于被序列化对象生成反序列化代码,减少人工编写反序列化代码的工作量,有效提升代码开发效率,并大大减少代码出现问题的可能性,且确保了代码的规范性以及正确性。的规范性以及正确性。的规范性以及正确性。

【技术实现步骤摘要】
一种反序列化代码生成方法及装置


[0001]本专利技术涉及一种反序列化代码生成方法及装置,具体一种Python对象反序列化代码生成方法和装置,属于软件


技术介绍

[0002]在编程语言中,通常通过将运行时对象序列化为二进制字节流来实现对象持久化或对象传输。二进制字节流一般是一系列字节码指令,用于恢复对象在编程语言解释器的状态。在Python编程语言中,序列化技术可以分为两类:基于引用的序列化和基于值的序列化。其中基于引用的序列化是指仅序列化对象本身的数据和其依赖的外部变量的引用,基于值的序列化是指递归地序列化依赖的外部变量的值。
[0003]基于引用的序列化的典型库为Pickle,这种技术通过分析被序列化对象的运行时状态,生成创建相同对象的字节码指令,并保存为字节流(上述字节码指令的生成方式由不同的序列化协议确定);在反序列化时,解析字节流,并执行创建被序列化对象的字节码指令,并恢复被序列化对象。这种方法可以正确还原被序列化对象,但无法还原对象依赖的其他对象,其原因在于对象内部包含对外部变量的引用,这部分变量指向其他运行时对象本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种反序列化代码生成方法,适用于Python语言,其特征在于,包括如下步骤:1)获取被序列化对象,抽取被序列化对象的上下文信息;2)根据上下文信息对被序列化对象进行依赖分析,获取所有依赖对象和依赖关系;3)分析所述依赖对象的对象类型和所属模块,生成创建对应对象的代码语句;4)将所述代码语句根据所述依赖关系排序,生成反序列化代码。2.根据权利要求1所述的反序列化代码生成方法,其特征在于,所述反序列化代码生成方法以函数接口形式在序列化程序源代码中被调用,被序列化对象以参数形式被传入所述函数接口,所述函数接口被调用之前,所述函数接口预先被导入至所述序列化程序源代码中。3.根据权利要求1所述的反序列化代码生成方法,其特征在于,抽取被序列化对象的上下文信息,所述上下文信息,包括:所述被序列化对象以参数形式被传入所述函数接口时,所在的栈帧中的变量信息;所述变量信息,包括:局部变量、嵌套变量、全局变量和内建变量。4.根据权利要求3所述的反序列化代码生成方法,其特征在于,所述2)中对被序列化对象进行依赖分析,获取所有依赖对象和依赖关系,具体包括:21)抽取被分析对象类型,将对象分类为值类型、类类型、函数类型、闭包类型、类实例类型、装饰器类型和容器类型;22)根据21)所述对象类型处理被分析对象,分析对象存在的依赖关系,所述依赖关系包括嵌套变量引用关系、全局变量引用关系、实例关系、成员关系、闭包关系、装饰关系和包含关系;最后,记录与被分析对象存在上述依赖关系的所有依赖对象;23)对22)所述依赖对象重复21)~22)步骤,直到被分析对象不存在上述依赖关系;所述22)的依赖关系识别方法,包括:嵌套变量引用关系,被分析对象内存在指向所述嵌套变量的引用,被分析对象对所述嵌套变量存在嵌套变量引用关系;全局变量引用关系,被分析对象内存在指向所述全局变量的引用,被分析对象对所述全局变量存在全局变量引用关系;实例关系,被分析对象是类类型对象的类实例类型对象,被分析对象对所述类类型对象存在实例关系;成员关系,被分析对象是类实例类型对象,被分析对象的成员包含其他对象,被分析对象与前述对象存在成员关系;前述对象指被分析对象成员中的其他对象;闭包关系,被分析对象是函数类型对象的闭包类型对象,被分析对象对所述函数类型对象存在闭包关系;装饰关系,被分析对象是类类型对象、函数类型对象或闭包类型对象,且被装饰器类型对象装饰,被分析对象对装饰器类型对象存在装饰关系;包含关系,被分析对象是容器类型对象,且包含其他对象,被分析对象与其他对象存在包含关系;所述22)依赖对象识别方法,包括,与被分析对象成立上述依赖关系的所有对象。5. 根据权利要求1所述的反序列化代码生成方法,其特征在于,所述3) 分析所述依赖<...

【专利技术属性】
技术研发人员:曹春徐经纬王国畅
申请(专利权)人:南京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1