CN102981884A - 序列化装置和序列化方法 - Google Patents
序列化装置和序列化方法 Download PDFInfo
- Publication number
- CN102981884A CN102981884A CN2012104805640A CN201210480564A CN102981884A CN 102981884 A CN102981884 A CN 102981884A CN 2012104805640 A CN2012104805640 A CN 2012104805640A CN 201210480564 A CN201210480564 A CN 201210480564A CN 102981884 A CN102981884 A CN 102981884A
- Authority
- CN
- China
- Prior art keywords
- type
- data
- attribute
- serializing
- unserializing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种序列化装置,包括:第一判断单元,判断源对象的类型是否为预设简单类型;第一转换单元,为预设简单类型时,将源对象的状态信息转换为待存储数据;第一获取单元,为预设复杂类型时,获取源对象中属性值不为空的属性,并根据属性生成相应的描述数据,将描述数据缓存至临时字节流中;计算单元,用于计算描述数据的字节流长度和结果数据的字节流长度之和;存储单元,用于将待存储数据保存至目标字节流中,并将源对象的字节流长度序列化至目标字节流中,将描述数据和结果数据保存至目标字节流中。本发明还提出了一种序列化方法。通过本发明的技术方案,能够提高序列化的通用性,提高序列化的效率,减少序列化后数据占用的存储空间。
Description
技术领域
本发明涉及序列化和反序列化技术领域,具体而言,涉及一种序列化装置和一种序列化方法。
背景技术
每种编程语言都提供了各自的序列化和反序列化的方法,通过这些编程语言提供的方法进行序列化后,数据占用的空间比较大,而且在序列化后只能使用对应语言的反序列化方法进行反序列化。
目前的序列化装置主要分为两类,一种是二进制序列化器,一种是XML(可扩展标记语言)序列化器。
二进制序列化器的优点是序列化的效率高,但是二进制数据可读性差,并且必须知道序列化数据的格式才能进行反序列化,而且由于编程语言的不同,对象序列化的格式也会不同,所以二进制序列化器通用性很差。
XML序列化器的优点是可以在各编程语言中通用,可读性强,但是序列化后的数据占用的空间比较大,而且由于XML都是以字符串方式存储的,所以序列化和反序列化时需要将对象转换为字符串,转换时降低序列化和反序列化对象的效率。
因此,需要一种新的序列化技术,能够提高序列化的通用性,提高序列化的效率,减少序列化后数据占用的存储空间。
发明内容
本发明正是基于上述问题,提出了一种序列化技术,能够提高序列化的通用性,提高序列化的效率,减少序列化后数据占用的存储空间。
有鉴于此,本发明提出了一种序列化装置,包括:第一判断单元,用于在所述序列化装置对源对象进行序列化时,判断所述源对象的类型是否为预设简单类型,若不是,则判定所述源对象的类型为预设复杂类型;第一转换单元,用于在所述源对象的类型为预设简单类型的情况下,将所述源对象的状态信息转换为待存储数据;第一获取单元,用于在所述源对象的类型为预设复杂类型的情况下,获取所述源对象中属性值不为空的属性,并根据所述属性生成相应的描述数据,将所述描述数据缓存至临时字节流中,以及根据所述属性对应的类型对所述属性的值进行序列化,并将序列化的结果数据缓存至所述临时字节流中;计算单元,用于计算所述描述数据的字节流长度和所述结果数据的字节流长度之和,以作为所述源对象的字节流长度;存储单元,用于将所述待存储数据保存至目标字节流中,并将所述源对象的字节流长度序列化至所述目标字节流中,以及将所述描述数据和所述结果数据保存至所述目标字节流中。
在该技术方案中,用户可以根据预先设置的预设简单类型和预设复杂类型,判断待序列化的源对象的类型,可以设置预设简单类型和预设复杂类型为个编程语言通用的基本数据类型,并且可以将序列化后的数据以字节流的方式进行存储,而字节是计算存储和传输数据的基本单位,各种编程语言都能识别字节,从而解决二进制序列化器通用性差的问题。
在上述技术方案中,优选地,所述第一判断单元还用于判断所述源对象的类型是否为空数据类型,若是,则将所述空数据类型对应的标识保存至所述目标字节流中,若不是,则判断所述源对象的类型是否为预设简单类型。
在该技术方案中,对于数据为空的数据对象可以不进行序列化,从而可以有效地减少对象描述所占用的空间。
在上述技术方案中,优选地,所述存储单元还用于将所述源对象的类型对应的标识保存至所述目标字节流中;所述第一获取单元还用于获取所述目标字节流中的所述标识;以及所述序列化装置还包括:第二判断单元,用于根据所述标识判断待反序列化的数据的类型是否为预设简单类型;第二获取单元,用于在所述第二判断单元的判断结果为是的情况下,获取所述字节流中除了所述标识对应的字节的其他字节,并将所述其他字节转换为相应的对象;第三判断单元,用于判断目标对象和所述相应的对象的类型是否相同;第二转换单元,用于在所述第三判断单元的判断结果为否的情况下,将所述相应的对象的类型转换为所述目标对象的类型;第一数值返回单元,用于将所述相应的对象赋值给所述目标对象,或将转换后的所述相应的对象赋值给所述目标对象;第三获取单元,用于在所述第二判断单元的判断结果为否的情况下,从所述字节流中获取所述描述数据,并获取所述目标对象中的目标属性的信息,查询与所述目标属性的名称相同的所述描述数据所描述的属性,根据所述描述数据反序列化出对象;第四判断单元,用于判断反序列化出来的对象的类型和所述目标对象的类型是否相同;第三转换单元,用于在所述第四判断单元的判断结果为否的情况下,将所述反序列化出来的对象的类型转换为所述目标对象的类型;第二数值返回单元,用于将所述反序列化出来的对象赋值给所述目标对象的相应的属性,或将转换后的对象赋值给所述目标对象的相应的属性。
在该技术方案中,反序列化过程中,可以通过对象转换装置,针对与目标对象不同类型的数据进行转换,使之与目标对象的类型相同,并且从字节流中获取数据进行反序列化处理,相对以往的反序列化器耗时较少,因此反序列化的效率较高。
在上述技术方案中,优选地,所述第二判断单元还用于判断待反序列化数据的类型是否为空数据类型,若是,则结束反序列化操作,若不是,则根据所述标识判断待反序列化数据的类型是否为预设简单类型。
在该技术方案中,对于数据为空的数据对象可以不进行序列化,从而可以有效地减少反序列化过程的耗时。
在上述任一技术方案中,优选地,所述预设简单类型包括以下至少一种:布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串和集合;以及所述预设复杂类型包括以下至少一种:类和结构。
根据本发明的又一方面,还提出了一种序列化方法,包括:步骤202,在对源对象进行序列化时,判断所述源对象的类型是否为预设简单类型,若不是预设简单类型,则判定所述源对象的类型为预设复杂类型;步骤204,若所述源对象的类型为预设简单类型,则将所述源对象的状态信息转换为待存储数据,并将所述待存储数据保存至目标字节流中;步骤206,若所述源对象的类型为预设复杂类型,则获取所述源对象中属性值不为空的属性,并根据所述属性生成相应的描述数据,将所述描述数据缓存至临时字节流,以及根据所述属性对应的类型对所述属性的值进行序列化,并将序列化的结果数据缓存至临时字节流;步骤208,计算所述描述数据的字节流长度和所述结果数据的字节流长度之和,以作为所述源对象的字节流长度,并将所述源对象的字节流长度序列化至所述目标字节流中,以及将所述描述数据和所述结果数据保存至所述目标字节流中。
在该技术方案中,用户可以根据预先设置的预设简单类型和预设复杂类型,判断待序列化的源对象的类型,可以设置预设简单类型和预设复杂类型为个编程语言通用的基本数据类型,并且可以将序列化后的数据以字节流的方式进行存储,而字节是计算存储和传输数据的基本单位,各种编程语言都能识别字节,从而解决二进制序列化器通用性差的问题。
在上述技术方案中,优选地,在所述步骤202之前,还包括:判断所述源对象的类型是否为空数据类型,若是,则将所述空数据类型对应的标识保存至所述目标字节流中,若不是,则进入步骤202。
在该技术方案中,对于数据为空的数据对象可以不进行序列化,从而可以有效地减少对象描述所占用的空间。
在上述技术方案中,优选地,所述步骤204还包括:将所述源对象的类型对应的标识保存至所述目标字节流中;以及所述序列化方法还包括:获取所述目标字节流中的所述标识,根据所述标识判断待反序列化的数据的类型是否为预设简单类型;若是预设简单类型,则获取所述字节流中除了所述标识对应的字节的其他字节,并将所述其他字节转换为相应的对象,判断目标对象和所述相应的对象的类型是否相同,若相同,则将所述相应的对象赋值给所述目标对象,若不相同,则将所述相应的对象的类型转换为所述目标对象的类型,并将转换后的所述相应的对象赋值给所述目标对象;若不是预设简单类型,则从所述字节流中获取所述描述数据,并获取所述目标对象中的目标属性的信息,查询与所述目标属性的名称相同的所述描述数据所描述的属性,根据所述描述数据反序列化出对象,判断反序列化出来的对象的类型和所述目标对象的类型是否相同,若相同,则将所述反序列化出来的对象赋值给所述目标对象的相应的属性,若不相同,则将所述反序列化出来的对象的类型转换为所述目标对象的类型,并将转换后的对象赋值给所述目标对象的相应的属性。
在该技术方案中,反序列化过程中,可以通过对象转换装置,针对与目标对象不同类型的数据进行转换,使之与目标对象的类型相同,并且从字节流中获取数据进行反序列化处理,相对以往的反序列化方法耗时较少,因此反序列化的效率较高。
在上述技术方案中,优选地,还包括:判断待反序列化数据的类型是否为空数据类型,若是,则结束反序列化操作,若不是,则根据所述标识判断待反序列化数据的类型是否为预设简单类型。
在该技术方案中,对于数据为空的数据对象可以不进行序列化,从而可以有效地减少反序列化过程的耗时。
在上述任一技术方案中,优选地,所述预设简单类型包括以下至少一种:布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串和集合;以及所述预设复杂类型包括以下至少一种:类和结构。
通过以上技术方案,可以能够提高序列化的通用性,提高序列化的效率,减少序列化后数据占用的存储空间。
附图说明
图1示出了根据本发明的实施例的序列化装置的框图;
图2示出了根据本发明的实施例的序列化方法的流程图;
图3示出了根据本发明的实施例的序列化方法的具体流程图;
图4示出了根据本发明的实施例的反序列化方法的具体流程图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
图1示出了根据本发明的实施例的序列化装置的框图。
如图1所示,根据本发明的实施例的序列化装置100包括:第一判断单元102,用于在序列化装置100对源对象进行序列化时,判断源对象的类型是否为预设简单类型,若不是,则判定源对象的类型为预设复杂类型;第一转换单元104,用于在源对象的类型为预设简单类型的情况下,将源对象的状态信息转换为待存储数据;第一获取单元106,用于在源对象的类型为预设复杂类型的情况下,获取源对象中属性值不为空的属性,并根据属性生成相应的描述数据,将描述数据缓存至临时字节流中,以及根据属性对应的类型对属性的值进行序列化,并将序列化的结果数据缓存至临时字节流中;计算单元108,用于计算描述数据的字节流长度和结果数据的字节流长度之和,以作为源对象的字节流长度;存储单元110,用于将待存储数据保存至目标字节流中,并将源对象的字节流长度序列化至目标字节流中,以及将描述数据和结果数据保存至目标字节流中。
用户可以根据预先设置的预设简单类型和预设复杂类型,判断待序列化的源对象的类型,比如表1所示,
表1
可以设置预设简单类型和预设复杂类型为个编程语言通用的基本数据类型,并且可以将序列化后的数据以字节流的方式进行存储,而字节是计算存储和传输数据的基本单位,各种编程语言都能识别字节,从而解决二进制序列化器通用性差的问题。
将源对象按照序表1中的类型获取对应的byte值,再将该byte值保存到目标字节流中,可以保存在字节流的第一位,以便反序列化时提取。
判断源对象(待序列化对象)的类型是简单类型(如整数、数字、日期等类型)还是复杂类型(如类、结构)。如果是简单类型,则直接将源对象的状态信息转换为字节数据,再将字节数据保存到目标字节流中,以完成序列化操作。
如果源对象的类型是复杂类型,首先获取源对象中的所有属性值不为空的属性,遍历获取到的所有属性,根据每个属性生成属性描述数据,属性描述数据由属性名称、该属性对应的类型、该属性在对象序列化后的字节流中的偏移值(偏移值在序列化属性值时回写)三部分组成。然后将生成的属性描述数据缓存在临时的字节流中。遍历所有的属性,根据属性对应的类型选择对应的序列化方式将源对象的状态信息序列化到临时的字节流中,计算属性描述数据的字节流的长度和属性值产生的字节流的长度之和,这个长度为对象所占用的字节流长度,将字节流长度序列化到目标字节流,再将属性描述数据转存到目标字节流中,以及将属性值转存到目标字节流中,以完成序列化。
优选地,第一判断单元102还用于判断源对象的类型是否为空数据类型,若是,则将空数据类型对应的标识保存至目标字节流中,若不是,则判断源对象的类型是否为预设简单类型。
对于数据为空的数据对象可以不进行序列化,从而可以有效地减少对象描述所占用的空间。
优选地,存储单元110还用于将源对象的类型对应的标识保存至目标字节流中;第一获取单元106还用于获取目标字节流中的标识;以及序列化装置100还包括:第二判断单元112,用于根据标识判断待反序列化的数据的类型是否为预设简单类型;第二获取单元114,用于在第二判断单元112的判断结果为是的情况下,获取字节流中除了标识对应的字节的其他字节,并将其他字节转换为相应的对象;第三判断单元116,用于判断目标对象和相应的对象的类型是否相同;第二转换单元118,用于在第三判断单元116的判断结果为否的情况下,则将相应的对象的类型转换为目标对象的类型;第一数值返回单元120,用于将相应的对象赋值给目标对象,或将转换后的相应的对象赋值给目标对象;第三获取单元122,用于在第二判断单元112的判断结果为否的情况下,从字节流中获取描述数据,并获取目标对象中的目标属性的信息,查询与目标属性的名称相同的描述数据所描述的属性,根据描述数据反序列化出对象;第四判断单元124,用于判断反序列化出来的对象的类型和目标对象的类型是否相同;第三转换单元126,用于在第四判断单元的判断结果为否的情况下,将反序列化出来的对象的类型转换为目标对象的类型;第二数值返回单元128,用于将反序列化出来的对象赋值给目标对象的相应的属性,或将转换后的对象赋值给目标对象的相应的属性。
反序列化过程中,可以通过对象转换装置,针对与目标对象不同类型的数据进行转换,使之与目标对象的类型相同,并且从字节流中获取数据进行反序列化处理,相对以往的反序列化器耗时较少,因此反序列化的效率较高。
可以从字节流中取第一个字节,将第一个字节的内容判断反序列化的对象在表1中的类型,如果类型为“空数据类型”,则直接返回结果“空”,并结束反序列化。
如果类型不是“空数据类型”,则进一步判断待反序列化的对象的类型简单类型还是复杂类型。
如果是简单类型,则将字节流中的从第二位字节开始的字节转换为相对应的对象,判断目标对象和相对应的对象的类型是否一致。如果一致则将相对应的对象直接返回,如果类型不一致,则使用对象转换装置,将相对应的对象的类型转换为目标对象类型,然后将转换后的结果返回。由于简单类型各编程语言都提供了相应的转换方法,在此不再赘述。
如果是复杂类型,从字节流中获取所有的属性描述信息,并从目标对象中获取所有的属性信息,遍历目标对象的每一个属性,然后创建目标对象,在字节流中查询与目标对象中属性名称相同的属性,如果没有找到相应的属性,则继续查找下一个属性
如果查询到了名称相同的属性,则首先判断字节流中的属性的类型和目标属性的类型是否一致,如果类型一致,则调用对应的反序列化器,将反序列化的结果赋值给对应的属性。如果类型不一致,如果目标属性和字节流中的属性都为简单类型,则根据字节流中的属性在表1中相应的类型获取对象值,再将获取到的对象值使用对象转换装置将转换为目标属性类型,最后将转换后的对象赋值给对应的属性。如果同为复杂类型,则使用复杂类型流程将字节流中对象反序列化出来并赋值给对应的数据。如果一个为简单类型一个为复杂类型则判定不能转换,则跳过该属性,继续反序列化下一个属性,直至反序列化所有属性,完成反序列化。
优选地,第二判断单元112还用于判断待反序列化数据的类型是否为空数据类型,若是,则结束反序列化操作,若不是,则根据标识判断待反序列化数据的类型是否为预设简单类型。
对于数据为空的数据对象可以不进行序列化,从而可以有效地减少反序列化过程的耗时。
优选地,预设简单类型包括以下至少一种:布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串和集合;以及预设复杂类型包括以下至少一种:类和结构。
显然,布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串、集合、类和结构都是各编程语言通用的基本数据类型。
图2示出了根据本发明的实施例的序列化方法的流程图。
如图2所示,根据本发明的实施例的序列化方法包括:步骤202,在对源对象进行序列化时,判断源对象的类型是否为预设简单类型,若不是预设简单类型,则源对象的类型为预设复杂类型;步骤204,若源对象的类型为预设简单类型,则将源对象的状态信息转换为待存储数据,并将待存储数据保存至目标字节流中;步骤206,若源对象的类型为预设复杂类型,则获取源对象中属性值不为空的属性,并根据属性生成相应的描述数据,将描述数据缓存至临时字节流,以及根据属性对应的类型对属性的值进行序列化,并将序列化的结果数据缓存至临时字节流;步骤208,计算描述数据的字节流长度和结果数据的字节流长度之和,以作为源对象的字节流长度,并将源对象的字节流长度序列化至目标字节流中,以及将描述数据和结果数据保存至目标字节流中。
用户可以根据预先设置的预设简单类型和预设复杂类型,判断待序列化的源对象的类型,比如表1所示,可以设置预设简单类型和预设复杂类型为个编程语言通用的基本数据类型,并且可以将序列化后的数据以字节流的方式进行存储,而字节是计算存储和传输数据的基本单位,各种编程语言都能识别字节,从而解决二进制序列化器通用性差的问题。
将源对象按照序表1中的类型获取对应的byte值,再将该byte值保存到目标字节流中,可以保存在字节流的第一位,以便反序列化时提取。
判断源对象(待序列化对象)的类型是简单类型(如整数、数字、日期等类型)还是复杂类型(类或者是结构)。如果是简单类型,则直接将源对象的状态信息转换为字节数据,再将字节数据保存到目标字节流中,以完成序列化操作。
如果源对象的类型是复杂类型,首先获取源对象中的所有属性值不为空的属性,遍历获取到的所有属性,根据每个属性生成属性描述数据,属性描述数据由属性名称、该属性对应的类型、该属性在对象序列化后的字节流中的偏移值(偏移值在序列化属性值时回写)三部分组成。然后将生成的属性描述数据缓存在临时的字节流中。遍历所有的属性,根据属性对应的类型选择对应的序列化方式将源对象的状态信息序列化到临时的字节流中,计算属性描述数据的字节流的长度和属性值产生的字节流的长度之和,这个长度为对象所占用的字节流长度,将字节流长度序列化到目标字节流,再将属性描述数据转存到目标字节流中,以及将属性值转存到目标字节流中,以完成序列化。
优选地,在步骤202之前,还包括:判断源对象的类型是否为空数据类型,若是,则将空数据类型对应的标识保存至目标字节流中,若不是,则进入步骤202。
对于数据为空的数据对象可以不进行序列化,从而可以有效地减少对象描述所占用的空间。
优选地,步骤204还包括:将源对象的类型对应的标识保存至目标字节流中;以及序列化方法还包括:获取目标字节流中的标识,根据标识判断待反序列化的数据的类型是否为预设简单类型;若是预设简单类型,则获取字节流中除了标识对应的字节的其他字节,并将其他字节转换为相应的对象,判断目标对象和相应的对象的类型是否相同,若相同,则将相应的对象赋值给目标对象,若不相同,则将相应的对象的类型转换为目标对象的类型,并将转换后的相应的对象赋值给目标对象;若不是预设简单类型,则从字节流中获取描述数据,并获取目标对象中的目标属性的信息,查询与目标属性的名称相同的描述数据所描述的属性,根据描述数据反序列化出对象,判断反序列化出来的对象的类型和目标对象的类型是否相同,若相同,则将反序列化出来的对象赋值给目标对象的相应的属性,若不相同,则将反序列化出来的对象的类型转换为目标对象的类型,并将转换后的对象赋值给目标对象的相应的属性。
反序列化过程中,可以通过对象转换装置,针对与目标对象不同类型的数据进行转换,使之与目标对象的类型相同,并且从字节流中获取数据进行反序列化处理,相对以往的反序列化器耗时较少,因此反序列化的效率较高。
可以从字节流中取第一个字节,将第一个字节的内容判断反序列化的对象在表1中的类型,如果类型为“空数据类型”,则直接返回结果“空”,并结束反序列化。
如果类型不是“空数据类型”,则进一步判断待反序列化的对象的类型简单类型还是复杂类型。
如果是简单类型,则将字节流中的从第二位字节开始的字节转换为相对应的对象,判断目标对象和相对应的对象的类型是否一致。如果一致则将相对应的对象直接返回,如果类型不一致,则使用对象转换装置,将相对应的对象的类型转换为目标对象类型,然后将转换后的结果返回。由于简单类型各编程语言都提供了相应的转换方法,在此不再赘述。
如果是复杂类型,从字节流中获取所有的属性描述信息,并从目标对象中获取所有的属性信息,遍历目标对象的每一个属性,然后创建目标对象,在字节流中查询与目标对象中属性名称相同的属性,如果没有找到相应的属性,则继续查找下一个属性
如果查询到了名称相同的属性,则首先判断字节流中的属性的类型和目标属性的类型是否一致,如果类型一致,则调用对应的反序列化器,将反序列化的结果赋值给对应的属性。如果类型不一致,如果目标属性和字节流中的属性都为简单类型,则根据字节流中的属性在表1中相应的类型获取对象值,再将获取到的对象值使用对象转换装置将转换为目标属性类型,最后将转换后的对象赋值给对应的属性。如果同为复杂类型,则使用复杂类型流程将字节流中对象反序列化出来并赋值给对应的数据。如果一个为简单类型一个为复杂类型则判定不能转换,则跳过该属性,继续反序列化下一个属性,直至反序列化所有属性,完成反序列化。
优选地,根据本发明的实施例的序列化方法还包括:判断待反序列化数据的类型是否为空数据类型,若是,则结束反序列化操作,若不是,则根据标识判断待反序列化数据的类型是否为预设简单类型。
对于数据为空的数据对象可以不进行序列化,从而可以有效地减少反序列化过程的耗时。
优选地,预设简单类型包括以下至少一种:布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串和集合;以及预设复杂类型包括以下至少一种:类和结构。
显然,布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串、集合、类和结构都是各编程语言通用的基本数据类型。
图3示出了根据本发明的实施例的序列化方法的具体流程图。
如图3所示,根据本发明的实施例的序列化方法具体包括:
步骤302,获取源对象的类型;
步骤304,将源对象的类型转换为字节流;
步骤306,判断源对象的类型;
步骤308,若源对象的类型为预设简单类型,根据源对象的类型对源对象进行序列化;
步骤310,将序列化后的字节数组序列化到字节流;
步骤312,若源对象的类型为预设复杂类型,获取对象中所有需要序列化的属性或者字段;
步骤314,根据属性对应序列化类型选择序列化器生成字节数组;
步骤316,将属性或者字段的描述信息(名称、序列化类型、属性序列化的字节流在在对象字节流的偏移量)序列化到目标字节流;
步骤318,根据属性生成的字节数组序列化到目标字节流。
图4示出了根据本发明的实施例的反序列化方法的具体流程图。
如图4所示,根据本发明的实施例的反序列化方法具体包括:
步骤402,从字节流中获取第一个字节;
步骤404,根据第一个字节的内容确定反序列化的对象类型;
步骤406,判断序列化类型是简单数据类型还是复杂数据类型;
步骤408,若是简单类型,则根据类型选择反序列化器;
步骤410,根据字节流中记录的类型反序列化出对象;
步骤412,判断跟目标对象类型是否一致;
步骤414,若不一致,则将反序列化出来的对象转换为目标对象;
步骤416,如一致,则将反序列化出来的对象直接赋值给目标对象;
步骤418,若是复杂类型,获取源对象中的所有的序列化后的属性描述信息;
步骤420,获取目标对象中的属性信息;
步骤422,在源对象属性描述中查找跟目标对象属性名称相同属性描述信息;
步骤424,根据属性描述信息反序列化出对象;
步骤426,判断反序列化出来的对象和目标属性类型是否一致;
步骤428,若一致,则将对象转换为目标对象类型;
步骤430,若不一致,将反序列化出来的对象赋值给目标对象的属性。
使用根据本发明的实施例的序列化装置100或根据本发明的实施例的序列化方法在C#环境下验证得出,空间占用比为C#自带的二进制序列化器进行序列化所占的空间节省70%左右,序列化的时间比C#自带的二进制序列化器进行序列化消耗的时间节省30%左右。
以上结合附图详细说明了本发明的技术方案,考虑到相关技术中,序列化器通用性较差,序列化后的数据需要较多存储空间,并且序列化和反序列化效率较低。通过本发明的技术方案,能够提高序列化的通用性,提高序列化的效率,减少序列化后数据占用的存储空间。
在本发明中,术语“第一”、“第二”、“第三”、“第四”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“多个”指两个或两个以上,除非另有明确的限定。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种序列化装置,其特征在于,包括:
第一判断单元,用于在所述序列化装置对源对象进行序列化时,判断所述源对象的类型是否为预设简单类型,若不是,则判定所述源对象的类型为预设复杂类型;
第一转换单元,用于在所述源对象的类型为预设简单类型的情况下,将所述源对象的状态信息转换为待存储数据;
第一获取单元,用于在所述源对象的类型为预设复杂类型的情况下,获取所述源对象中属性值不为空的属性,并根据所述属性生成相应的描述数据,将所述描述数据缓存至临时字节流中,以及根据所述属性对应的类型对所述属性的值进行序列化,并将序列化的结果数据缓存至所述临时字节流中;
计算单元,用于计算所述描述数据的字节流长度和所述结果数据的字节流长度之和,以作为所述源对象的字节流长度;
存储单元,用于将所述待存储数据保存至目标字节流中,并将所述源对象的字节流长度序列化至所述目标字节流中,以及将所述描述数据和所述结果数据保存至所述目标字节流中。
2.根据权利要求1所述的序列化装置,其特征在于,所述第一判断单元还用于判断所述源对象的类型是否为空数据类型,若是,则将所述空数据类型对应的标识保存至所述目标字节流中,若不是,则判断所述源对象的类型是否为预设简单类型。
3.根据权利要求1所述的序列化装置,其特征在于,所述存储单元还用于将所述源对象的类型对应的标识保存至所述目标字节流中;所述第一获取单元还用于获取所述目标字节流中的所述标识;以及所述序列化装置还包括:
第二判断单元,用于根据所述标识判断待反序列化的数据的类型是否为预设简单类型;
第二获取单元,用于在所述第二判断单元的判断结果为是的情况下,获取所述字节流中除了所述标识对应的字节的其他字节,并将所述其他字节转换为相应的对象;
第三判断单元,用于判断目标对象和所述相应的对象的类型是否相同;
第二转换单元,用于在所述第三判断单元的判断结果为否的情况下,将所述相应的对象的类型转换为所述目标对象的类型;
第一数值返回单元,用于将所述相应的对象赋值给所述目标对象,或将转换后的所述相应的对象赋值给所述目标对象;
第三获取单元,用于在所述第二判断单元的判断结果为否的情况下,从所述字节流中获取所述描述数据,并获取所述目标对象中的目标属性的信息,查询与所述目标属性的名称相同的所述描述数据所描述的属性,根据所述描述数据反序列化出对象;
第四判断单元,用于判断反序列化出来的对象的类型和所述目标对象的类型是否相同;
第三转换单元,用于在所述第四判断单元的判断结果为否的情况下,将所述反序列化出来的对象的类型转换为所述目标对象的类型;
第二数值返回单元,用于将所述反序列化出来的对象赋值给所述目标对象的相应的属性,或将转换后的对象赋值给所述目标对象的相应的属性。
4.根据权利要求3所述的序列化装置,其特征在于,所述第二判断单元还用于判断待反序列化数据的类型是否为空数据类型,若是,则结束反序列化操作,若不是,则根据所述标识判断待反序列化数据的类型是否为预设简单类型。
5.根据权利要求1至4中任一项所述的序列化装置,其特征在于,所述预设简单类型包括以下至少一种:布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串和集合;以及所述预设复杂类型包括以下至少一种:类和结构。
6.一种序列化方法,其特征在于,包括:
步骤202,在对源对象进行序列化时,判断所述源对象的类型是否为预设简单类型,若不是预设简单类型,则判定所述源对象的类型为预设复杂类型;
步骤204,若所述源对象的类型为预设简单类型,则将所述源对象的状态信息转换为待存储数据,并将所述待存储数据保存至目标字节流中;
步骤206,若所述源对象的类型为预设复杂类型,则获取所述源对象中属性值不为空的属性,并根据所述属性生成相应的描述数据,将所述描述数据缓存至临时字节流,以及根据所述属性对应的类型对所述属性的值进行序列化,并将序列化的结果数据缓存至临时字节流;
步骤208,计算所述描述数据的字节流长度和所述结果数据的字节流长度之和,以作为所述源对象的字节流长度,并将所述源对象的字节流长度序列化至所述目标字节流中,以及将所述描述数据和所述结果数据保存至所述目标字节流中。
7.根据权利要求6所述的序列化方法,其特征在于,在所述步骤202之前,还包括:判断所述源对象的类型是否为空数据类型,若是,则将所述空数据类型对应的标识保存至所述目标字节流中,若不是,则进入步骤202。
8.根据权利要求6所述的序列化方法,其特征在于,所述步骤204还包括:将所述源对象的类型对应的标识保存至所述目标字节流中;以及所述序列化方法还包括:
获取所述目标字节流中的所述标识,根据所述标识判断待反序列化的数据的类型是否为预设简单类型;
若是预设简单类型,则获取所述字节流中除了所述标识对应的字节的其他字节,并将所述其他字节转换为相应的对象,判断目标对象和所述相应的对象的类型是否相同,若相同,则将所述相应的对象赋值给所述目标对象,若不相同,则将所述相应的对象的类型转换为所述目标对象的类型,并将转换后的所述相应的对象赋值给所述目标对象;
若不是预设简单类型,则从所述字节流中获取所述描述数据,并获取所述目标对象中的目标属性的信息,查询与所述目标属性的名称相同的所述描述数据所描述的属性,根据所述描述数据反序列化出对象,判断反序列化出来的对象的类型和所述目标对象的类型是否相同,若相同,则将所述反序列化出来的对象赋值给所述目标对象的相应的属性,若不相同,则将所述反序列化出来的对象的类型转换为所述目标对象的类型,并将转换后的对象赋值给所述目标对象的相应的属性。
9.根据权利要求8所述的序列化方法,其特征在于,还包括:判断待反序列化数据的类型是否为空数据类型,若是,则结束反序列化操作,若不是,则根据所述标识判断待反序列化数据的类型是否为预设简单类型。
10.根据权利要求6至9中任一项所述的序列化方法,其特征在于,所述预设简单类型包括以下至少一种:布尔、浮点数、双精度浮点数、短整数、整数、长整数、日期、字符串和集合;以及所述预设复杂类型包括以下至少一种:类和结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210480564.0A CN102981884B (zh) | 2012-11-22 | 2012-11-22 | 序列化装置和序列化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210480564.0A CN102981884B (zh) | 2012-11-22 | 2012-11-22 | 序列化装置和序列化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102981884A true CN102981884A (zh) | 2013-03-20 |
CN102981884B CN102981884B (zh) | 2016-03-30 |
Family
ID=47855946
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210480564.0A Active CN102981884B (zh) | 2012-11-22 | 2012-11-22 | 序列化装置和序列化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102981884B (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104486396A (zh) * | 2014-12-10 | 2015-04-01 | 中国电信集团系统集成有限责任公司 | 一种跨平台的网络数据的传输方法 |
CN106095698A (zh) * | 2016-06-03 | 2016-11-09 | 合网络技术(北京)有限公司 | 面向对象的缓存写入、读取方法及装置 |
CN106155630A (zh) * | 2015-04-14 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 序列化方法、反序列化方法、序列化装置及反序列化装置 |
CN106250248A (zh) * | 2016-07-28 | 2016-12-21 | 努比亚技术有限公司 | 一种对返回数据进行类型转换的方法和装置 |
CN106648817A (zh) * | 2016-12-09 | 2017-05-10 | 北京酷我科技有限公司 | 一种跨平台的数据对象传输方法 |
CN106775696A (zh) * | 2016-12-08 | 2017-05-31 | 蓝信工场(北京)科技有限公司 | 数据处理方法及装置 |
CN106815238A (zh) * | 2015-11-30 | 2017-06-09 | 阿里巴巴集团控股有限公司 | 一种结构化数据的序列化、反序列化方法及装置 |
CN107526926A (zh) * | 2017-08-09 | 2017-12-29 | 沈阳东软医疗系统有限公司 | 一种图像体数据分割标识处理方法、装置及设备 |
CN108932123A (zh) * | 2018-06-21 | 2018-12-04 | 北京奇虎科技有限公司 | 参数处理方法和装置 |
CN109460304A (zh) * | 2017-09-06 | 2019-03-12 | 阿里巴巴集团控股有限公司 | 一种跨应用的通知展示、通知内容封装方法和装置 |
CN109491727A (zh) * | 2018-10-16 | 2019-03-19 | 深圳壹账通智能科技有限公司 | 对象序列化方法、终端设备及计算机可读存储介质 |
CN110694275A (zh) * | 2019-09-29 | 2020-01-17 | 北京金山安全软件有限公司 | 数据存储方法、装置及设备 |
CN110932916A (zh) * | 2019-12-20 | 2020-03-27 | 惠州市德赛西威汽车电子股份有限公司 | 一种改进的oma dm协议数据编码方法 |
CN111241346A (zh) * | 2020-01-15 | 2020-06-05 | 上海依图网络科技有限公司 | 一种对象序列化方法、装置、机器可读介质以及系统 |
CN116301666A (zh) * | 2023-05-17 | 2023-06-23 | 杭州数云信息技术有限公司 | Java对象序列化方法及其反序列化方法及装置、终端 |
WO2023124425A1 (zh) * | 2021-12-30 | 2023-07-06 | 深圳市兆珑科技有限公司 | 数据处理的方法、装置、电子设备及存储介质 |
WO2023185401A1 (zh) * | 2022-03-28 | 2023-10-05 | 华为技术有限公司 | 一种数据处理方法、编解码加速器和相关设备 |
CN117271456A (zh) * | 2023-11-22 | 2023-12-22 | 阿里云计算有限公司 | 数据序列化方法、反序列化方法、电子设备及存储介质 |
CN117271840A (zh) * | 2023-09-22 | 2023-12-22 | 北京海致星图科技有限公司 | 图数据库的数据查询方法、装置及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080082552A1 (en) * | 2006-10-02 | 2008-04-03 | Autodesk, Inc. | Data locality in a serialized object stream |
CN101277161A (zh) * | 2008-03-28 | 2008-10-01 | 中兴通讯股份有限公司 | 一种电子服务指南数据的序列化及反序列化方法 |
CN102750268A (zh) * | 2012-06-19 | 2012-10-24 | 山东中创软件商用中间件股份有限公司 | 一种对象序列化方法、对象反序列化方法、装置及系统 |
-
2012
- 2012-11-22 CN CN201210480564.0A patent/CN102981884B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080082552A1 (en) * | 2006-10-02 | 2008-04-03 | Autodesk, Inc. | Data locality in a serialized object stream |
CN101277161A (zh) * | 2008-03-28 | 2008-10-01 | 中兴通讯股份有限公司 | 一种电子服务指南数据的序列化及反序列化方法 |
CN102750268A (zh) * | 2012-06-19 | 2012-10-24 | 山东中创软件商用中间件股份有限公司 | 一种对象序列化方法、对象反序列化方法、装置及系统 |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104486396B (zh) * | 2014-12-10 | 2017-12-26 | 中国电信集团系统集成有限责任公司 | 一种跨平台的网络数据的传输方法 |
CN104486396A (zh) * | 2014-12-10 | 2015-04-01 | 中国电信集团系统集成有限责任公司 | 一种跨平台的网络数据的传输方法 |
CN106155630A (zh) * | 2015-04-14 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 序列化方法、反序列化方法、序列化装置及反序列化装置 |
CN106815238B (zh) * | 2015-11-30 | 2020-10-20 | 阿里巴巴集团控股有限公司 | 一种结构化数据的序列化、反序列化方法及装置 |
CN106815238A (zh) * | 2015-11-30 | 2017-06-09 | 阿里巴巴集团控股有限公司 | 一种结构化数据的序列化、反序列化方法及装置 |
CN106095698B (zh) * | 2016-06-03 | 2019-04-23 | 合一网络技术(北京)有限公司 | 面向对象的缓存写入、读取方法及装置 |
CN106095698A (zh) * | 2016-06-03 | 2016-11-09 | 合网络技术(北京)有限公司 | 面向对象的缓存写入、读取方法及装置 |
CN106250248A (zh) * | 2016-07-28 | 2016-12-21 | 努比亚技术有限公司 | 一种对返回数据进行类型转换的方法和装置 |
CN106775696A (zh) * | 2016-12-08 | 2017-05-31 | 蓝信工场(北京)科技有限公司 | 数据处理方法及装置 |
CN106648817A (zh) * | 2016-12-09 | 2017-05-10 | 北京酷我科技有限公司 | 一种跨平台的数据对象传输方法 |
CN106648817B (zh) * | 2016-12-09 | 2020-07-28 | 北京酷我科技有限公司 | 一种跨平台的数据对象传输方法 |
CN107526926A (zh) * | 2017-08-09 | 2017-12-29 | 沈阳东软医疗系统有限公司 | 一种图像体数据分割标识处理方法、装置及设备 |
CN109460304A (zh) * | 2017-09-06 | 2019-03-12 | 阿里巴巴集团控股有限公司 | 一种跨应用的通知展示、通知内容封装方法和装置 |
CN109460304B (zh) * | 2017-09-06 | 2022-06-03 | 阿里巴巴集团控股有限公司 | 一种跨应用的通知展示、通知内容封装方法和装置 |
CN108932123A (zh) * | 2018-06-21 | 2018-12-04 | 北京奇虎科技有限公司 | 参数处理方法和装置 |
CN108932123B (zh) * | 2018-06-21 | 2022-03-11 | 北京奇虎科技有限公司 | 参数处理方法和装置 |
CN109491727A (zh) * | 2018-10-16 | 2019-03-19 | 深圳壹账通智能科技有限公司 | 对象序列化方法、终端设备及计算机可读存储介质 |
CN110694275A (zh) * | 2019-09-29 | 2020-01-17 | 北京金山安全软件有限公司 | 数据存储方法、装置及设备 |
CN110932916A (zh) * | 2019-12-20 | 2020-03-27 | 惠州市德赛西威汽车电子股份有限公司 | 一种改进的oma dm协议数据编码方法 |
CN110932916B (zh) * | 2019-12-20 | 2022-11-15 | 惠州市德赛西威汽车电子股份有限公司 | 一种改进的oma dm协议数据编码方法 |
CN111241346A (zh) * | 2020-01-15 | 2020-06-05 | 上海依图网络科技有限公司 | 一种对象序列化方法、装置、机器可读介质以及系统 |
CN111241346B (zh) * | 2020-01-15 | 2023-11-10 | 上海依图网络科技有限公司 | 一种对象序列化方法、装置、机器可读介质以及系统 |
WO2023124425A1 (zh) * | 2021-12-30 | 2023-07-06 | 深圳市兆珑科技有限公司 | 数据处理的方法、装置、电子设备及存储介质 |
WO2023185401A1 (zh) * | 2022-03-28 | 2023-10-05 | 华为技术有限公司 | 一种数据处理方法、编解码加速器和相关设备 |
CN116301666A (zh) * | 2023-05-17 | 2023-06-23 | 杭州数云信息技术有限公司 | Java对象序列化方法及其反序列化方法及装置、终端 |
CN116301666B (zh) * | 2023-05-17 | 2023-10-10 | 杭州数云信息技术有限公司 | Java对象序列化方法及其反序列化方法及装置、终端 |
CN117271840A (zh) * | 2023-09-22 | 2023-12-22 | 北京海致星图科技有限公司 | 图数据库的数据查询方法、装置及电子设备 |
CN117271840B (zh) * | 2023-09-22 | 2024-02-13 | 北京海致星图科技有限公司 | 图数据库的数据查询方法、装置及电子设备 |
CN117271456A (zh) * | 2023-11-22 | 2023-12-22 | 阿里云计算有限公司 | 数据序列化方法、反序列化方法、电子设备及存储介质 |
CN117271456B (zh) * | 2023-11-22 | 2024-03-26 | 阿里云计算有限公司 | 数据序列化方法、反序列化方法、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102981884B (zh) | 2016-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102981884A (zh) | 序列化装置和序列化方法 | |
Moens et al. | Frequent itemset mining for big data | |
US8977626B2 (en) | Indexing and searching a data collection | |
CN105183764B (zh) | 一种数据分页方法及装置 | |
CN101692651A (zh) | 一种哈希查找表的方法和装置 | |
CN103345496B (zh) | 多媒体信息检索方法和系统 | |
CN106202548A (zh) | 数据存储方法、查找方法及装置 | |
CN103186541A (zh) | 一种映射关系生成方法及装置 | |
CN103914483B (zh) | 文件存储方法、装置及文件读取方法、装置 | |
CN103488759A (zh) | 一种根据关键词搜索应用程序的方法和装置 | |
CN104572983A (zh) | 基于内存的散列表的构建方法、文本查找方法及相应装置 | |
CN104794221A (zh) | 一种基于业务对象的多维数据分析系统 | |
CN107567621A (zh) | 用于执行数字搜索的方法、系统和计算机程序产品 | |
CN106326475A (zh) | 一种高效的静态哈希表实现方法及系统 | |
CN101986672B (zh) | 一种信息处理方法及装置 | |
JP6418431B2 (ja) | 効率的な1対1結合のための方法 | |
CN100397397C (zh) | 基于关系数据库的xml数据存储与访问方法 | |
CN111046106A (zh) | 缓存数据同步方法、装置、设备及介质 | |
CN101604336A (zh) | 一种从源头进行数据检验、修正的方法和系统 | |
CN110032664A (zh) | 一种快速建立比特币区块链全节点地址索引的方法 | |
CN103455434A (zh) | 一种建立缓存目录的方法及系统 | |
CN116339716A (zh) | 一种流程图的分析方法 | |
CN106055646A (zh) | 一种并发哈希表的无锁操作方法 | |
Li et al. | A human-computer interactive dynamic description method for Jiaguwen Characters | |
CN113407702B (zh) | 员工合作关系强度量化方法、系统、计算机和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20160127 Address after: 100094 Beijing City, North Road, Haidian District, No. 68, building 2, floor 2 Applicant after: You Pu Information Technology Co., Ltd of UFSOFT Address before: 100094 Beijing city Haidian District North Road No. 68, UFIDA Software Park Applicant before: UFIDA Software Co., Ltd. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |