本发明专利技术提供了一种序列化装置,包括:第一判断单元,判断源对象的类型是否为预设简单类型;第一转换单元,为预设简单类型时,将源对象的状态信息转换为待存储数据;第一获取单元,为预设复杂类型时,获取源对象中属性值不为空的属性,并根据属性生成相应的描述数据,将描述数据缓存至临时字节流中;计算单元,用于计算描述数据的字节流长度和结果数据的字节流长度之和;存储单元,用于将待存储数据保存至目标字节流中,并将源对象的字节流长度序列化至目标字节流中,将描述数据和结果数据保存至目标字节流中。本发明专利技术还提出了一种序列化方法。通过本发明专利技术的技术方案,能够提高序列化的通用性,提高序列化的效率,减少序列化后数据占用的存储空间。
【技术实现步骤摘要】
本专利技术涉及序列化和反序列化
,具体而言,涉及一种序列化装置和一种序列化方法。
技术介绍
每种编程语言都提供了各自的序列化和反序列化的方法,通过这些编程语言提供的方法进行序列化后,数据占用的空间比较大,而且在序列化后只能使用对应语言的反序列化方法进行反序列化。目前的序列化装置主要分为两类,一种是二进制序列化器,一种是XML(可扩展标记语言)序列化器。二进制序列化器的优点是序列化的效率高,但是二进制数据可读性差,并且必须知道序列化数据的格式才能进行反序列化,而且由于编程语言的不同,对象序列化的格式也会不同,所以二进制序列化器通用性很差。XML序列化器的优点是可以在各编程语言中通用,可读性强,但是序列化后的数据占用的空间比较大,而且由于XML都是以字符串方式存储的,所以序列化和反序列化时需要将对象转换为字符串,转换时降低序列化和反序列化对象的效率。因此,需要一种新的序列化技术,能够提高序列化的通用性,提高序列化的效率,减少序列化后数据占用的存储空间。
技术实现思路
本专利技术正是基于上述问题,提出了一种序列化技术,能够提高序列化的通用性,提闻序列化的效率,减少序列化后数据占用的存储空间。有鉴于此,本专利技术提出了一种序列化装置,包括第一判断单元,用于在所述序列化装置对源对象进行序列化时,判断所述源对象的类型是否为预设简单类型,若不是,则判定所述源对象的类型为预设复杂类型;第一转换单元,用于在所述源对象的类型为预设简单类型的情况下,将所述源对象的状态信息转换为待存储数据;第一获取单元,用于在所述源对象的类型为预设复杂类型的情况下,获取所述源对象中属性值不为空的属性,并根据所述属性生成相应的描述数据,将所述描述数据缓存至临时字节流中,以及根据所述属性对应的类型对所述属性的值进行序列化,并将序列化的结果数据缓存至所述临时字节流中;计算单元,用于计算所述描述数据的字节流长度和所述结果数据的字节流长度之和,以作为所述源对象的字节流长度;存储单元,用于将所述待存储数据保存至目标字节流中,并将所述源对象的字节流长度序列化至所述目标字节流中,以及将所述描述数据和所述结果数据保存至所述目标字节流中。在该技术方案中,用户可以根据预先设置的预设简单类型和预设复杂类型,判断待序列化的源对象的类型,可以设置预设简单类型和预设复杂类型为个编程语言通用的基本数据类型,并且可以将序列化后的数据以字节流的方式进行存储,而字节是计算存储和传输数据的基本单位,各种编程语言都能识别字节,从而解决二进制序列化器通用性差的问题。在上述技术方案中,优选地,所述第一判断单元还用于判断所述源对象的类型是否为空数据类型,若是,则将所述空数据类型对应的标识保存至所述目标字节流中,若不是,则判断所述源对象的类型是否为预设简单类型。在该技术方案中,对于数据为空的数据对象可以不进行序列化,从而可以有效地减少对象描述所占用的空间。在上述技术方案中,优选地,所述存储单元还用于将所述源对象的类型对应的标识保存至所述目标字节流中;所述第一获取单元还用于获取所述目标字节流中的所述标识;以及所述序列化装置还包括第二判断单元,用于根据所述标识判断待反序列化的数据的类型是否为预设简单类型;第二获取单元,用于在所述第二判断单元的判断结果为是的情况下,获取所述字节流中除了所述标识对应的字节的其他字节,并将所述其他字节转换为相应的对象;第三判断单元,用于判断目标对象和所述相应的对象的类型是否相同;第二转换单元,用于在所述第三判断单元的判断结果为否的情况下,将所述相应的对象的类型转换为所述目标对象的类型;第一数值返回单元,用于将所述相应的对象赋值给所述目标对象,或将转换后的所述相应的对象赋值给所述目标对象;第三获取单元,用于在所述第二判断单元的判断结果为否的情况下,从所述字节流中获取所述描述数据,并获取所述目标对象中的目标属性的信息,查询与所述目标属性的名称相同的所述描述数据所描述的属性,根据所述描述数据反序列化出对象;第四判断单元,用于判断反序列化出来的对象的类型和所述目标对象的类型是否相同;第三转换单元,用于在所述第四判断单元的判断结果为否的情况下,将所述反序列化出来的对象的类型转换为所述目标对象的类型;第二数值返回单元,用于将所述反序列化出来的对象赋值给所述目标对象的相应的属性,或将转换后的对象赋值给所述目标对象的相应的属性。在该技术方案中,反序列化过程中,可以通过对象转换装置,针对与目标对象不同类型的数据进行转换,使之与目标对象的类型相同,并且从字节流中获取数据进行反序列化处理,相对以往的反序列化器耗时较少,因此反序列化的效率较高。在上述技术方案中,优选地,所述第二判断单元还用于判断待反序列化数据的类型是否为空数据类型,若是,则结束反序列化操作,若不是,则根据所述标识判断待反序列化数据的类型是否为预设简单类型。在该技术方案中,对于数据为空的数据对象可以不进行序列化,从而可以有效地减少反序列化过程的耗时。在上述任一技术方案中,优选地,所述预设简单类型包括以下至少一种布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串和集合;以及所述预设复杂类型包括以下至少一种类和结构。根据本专利技术的又一方面,还提出了一种序列化方法,包括步骤202,在对源对象进行序列化时,判断所述源对象的类型是否为预设简单类型,若不是预设简单类型,则判定所述源对象的类型为预设复杂类型;步骤204,若所述源对象的类型为预设简单类型,则将所述源对象的状态信息转换为待存储数据,并将所述待存储数据保存至目标字节流中;步骤206,若所述源对象的类型为预设复杂类型,则获取所述源对象中属性值不为空的属性,并根据所述属性生成相应的描述数据,将所述描述数据缓存至临时字节流,以及根据所述属性对应的类型对所述属性的值进行序列化,并将序列化的结果数据缓存至临时字节流;步骤208,计算所述描述数据的字节流长度和所述结果数据的字节流长度之和,以作为所述源对象的字节流长度,并将所述源对象的字节流长度序列化至所述目标字节流中,以及将所述描述数据和所述结果数据保存至所述目标字节流中。在该技术方案中,用户可以根据预先设置的预设简单类型和预设复杂类型,判断待序列化的源对象的类型,可以设置预设简单类型和预设复杂类型为个编程语言通用的基本数据类型,并且可以将序列化后的数据以字节流的方式进行存储,而字节是计算存储和传输数据的基本单位,各种编程语言都能识别字节,从而解决二进制序列化器通用性差的问题。在上述技术方案中,优选地,在所述步骤202之前,还包括判断所述源对象的类型是否为空数据类型,若是,则将所述空数据类型对应的标识保存至所述目标字节流中,若不是,则进入步骤202。在该技术方案中,对于数据为空的数据对象可以不进行序列化,从而可以有效地减少对象描述所占用的空间。在上述技术方案中,优选地,所述步骤204还包括将所述源对象的类型对应的标识保存至所述目标字节流中;以及所述序列化方法还包括获取所述目标字节流中的所述标识,根据所述标识判断待反序列化的数据的类型是否为预设简单类型;若是预设简单类型,则获取所述字节流中除了所述标识对应的字节的其他字节,并将所述其他字节转换为相应的对象,判断目标对象和所述相应的对象的类型是否相同,若相同,则将所述相应的对象本文档来自技高网...
【技术保护点】
一种序列化装置,其特征在于,包括:第一判断单元,用于在所述序列化装置对源对象进行序列化时,判断所述源对象的类型是否为预设简单类型,若不是,则判定所述源对象的类型为预设复杂类型;第一转换单元,用于在所述源对象的类型为预设简单类型的情况下,将所述源对象的状态信息转换为待存储数据;第一获取单元,用于在所述源对象的类型为预设复杂类型的情况下,获取所述源对象中属性值不为空的属性,并根据所述属性生成相应的描述数据,将所述描述数据缓存至临时字节流中,以及根据所述属性对应的类型对所述属性的值进行序列化,并将序列化的结果数据缓存至所述临时字节流中;计算单元,用于计算所述描述数据的字节流长度和所述结果数据的字节流长度之和,以作为所述源对象的字节流长度;存储单元,用于将所述待存储数据保存至目标字节流中,并将所述源对象的字节流长度序列化至所述目标字节流中,以及将所述描述数据和所述结果数据保存至所述目标字节流中。
【技术特征摘要】
【专利技术属性】
技术研发人员:蒋生锋,
申请(专利权)人:用友软件股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。