CN105335156B - 一种java对象序列化的方法以及系统 - Google Patents

一种java对象序列化的方法以及系统 Download PDF

Info

Publication number
CN105335156B
CN105335156B CN201510690629.8A CN201510690629A CN105335156B CN 105335156 B CN105335156 B CN 105335156B CN 201510690629 A CN201510690629 A CN 201510690629A CN 105335156 B CN105335156 B CN 105335156B
Authority
CN
China
Prior art keywords
java
root
instance
diagram
objects
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.)
Active
Application number
CN201510690629.8A
Other languages
English (en)
Other versions
CN105335156A (zh
Inventor
林斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujian Star Net Communication Co Ltd
Original Assignee
Fujian Star Net Communication Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujian Star Net Communication Co Ltd filed Critical Fujian Star Net Communication Co Ltd
Priority to CN201510690629.8A priority Critical patent/CN105335156B/zh
Publication of CN105335156A publication Critical patent/CN105335156A/zh
Application granted granted Critical
Publication of CN105335156B publication Critical patent/CN105335156B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种java对象序列化的方法,该方法为:1、对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,并将对象图和该对象图的根对象的信息一起当做元数据信息存储于所述根对象的元数据信息集合中;2、将根对象的元数据信息集合中所有存在引用关系的java对象进行对象实例,并存储于一对象实例集合中;3、将对象实例集合中的各对象实例进行编号,将根对象的根对象实例标记为0号,其余根据对象实例的引用关系的顺序从0后进行编号;4、将所有对象实例按编号顺序进行序列化后存储于一二进制的数据结构体中。本发明提高了序列化的性能,提高了逆序列化的速度,避免了Java反射造成的性能损耗。

Description

一种java对象序列化的方法以及系统
技术领域
本发明涉及Java应用远程调用技术领域,尤其涉及一种java对象序列化的方法以及系统。
背景技术
在一些分布式的开发程序中,为了方便使用,常常需要将Java对象以二进制作为数据进行传输。一些本地应用场景也需要将内存中的java对象以二进制的形式保存到磁盘文件中。这种将Java对象转变为二进制的行为称之为序列化。Java语言自身具备了序列化机制,然而因为使用不方便并且性能低下,故而市面上出现了许多第三方的序列化库。但是这些序列化库都不具备足够强大的性能。
发明内容
本发明要解决的技术问题之一,在于提供一种java对象序列化的方法,提高了序列化的性能,提高了逆序列化的速度,避免了Java反射造成的性能损耗。
本发明问题之一是这样实现的:一种java对象序列化的方法,包括如下步骤:
步骤1、对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,并将对象图和该对象图的根对象的信息一起当做元数据信息存储于所述根对象的元数据信息集合中;
步骤2、将根对象的元数据信息集合中所有存在引用关系的java对象进行对象实例,并存储于一对象实例集合中;
步骤3、将对象实例集合中的各对象实例进行编号,将根对象的根对象实例标记为0号,其余根据对象实例的引用关系的顺序从0后进行编号;
步骤4、将所有对象实例按编号顺序进行序列化后存储于一二进制的数据结构体中。
进一步的,所述步骤1中对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,具体为:获取开发程序中各个java对象下所有的属性元素;判断每一个属性元素是否是基本类型,或是否是基本类型的包装类型,或是否是基本类型的数组,或是否是基本类型的包装类型的数组;都不是,则将该元素进行记录,再分析下一个对象;属性元素是四种情况中的一种,则,将属性元素集中在基本元素集合中,判断位于基本元素集合中的各个java对象对应的属性元素是否存在引用关系,是,则将存在引用关系的java对象进行集中后形成对象图,否,则不进行操作。
进一步的,所述步骤2具体为:对象图包含从根对象开始的所有对象的关联关系,以及每个对象对其他对象的依存关系;依靠对象图,给定根对象实例,从根对象出发,所有直接挂靠在根对象下的对象得到一个集合,使用这个集合信息从根对象实例中取得所有直接挂靠在根对象实例下的对象实例;每次取得的实例都放入同一个对象实例集合中;重复这个过程,直到没有新的对象被发现。
进一步的,所述步骤4具体为:将所有对象实例的类名进行序列化后存储在二进制的数据结构体的头部,按照编号顺序将所有对象实例的内容值进行序列化后存储在二进制的数据结构体的中段。
本发明要解决的技术问题之二,在于提供一种java对象序列化的系统,提高了序列化的性能,提高了逆序列化的速度,避免了Java反射造成的性能损耗。
本发明问题之二是这样实现的:一种java对象序列化的系统,所述系统包括对象图形成模块、对象实例模块、对象实例编号模块以及序列化模块;
所述对象图形成模块,用于对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,并将对象图和该对象图的根对象的信息一起当做元数据信息存储于所述根对象的元数据信息集合中;
所述对象实例模块,用于将根对象的元数据信息集合中所有存在引用关系的java对象进行对象实例,并存储于一对象实例集合中;
所述对象实例编号模块,用于将对象实例集合中的各对象实例进行编号,将根对象的根对象实例标记为0号,其余根据对象实例的引用关系的顺序从0后进行编号;
所述序列化模块,用于将所有对象实例按编号顺序进行序列化后存储于一二进制的数据结构体中。
进一步的,所述对象图形成模块中对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,具体为:获取开发程序中各个java对象下所有的属性元素;判断每一个属性元素是否是基本类型,或是否是基本类型的包装类型,或是否是基本类型的数组,或是否是基本类型的包装类型的数组;都不是,则将该元素进行记录,再分析下一个对象;属性元素是四种情况中的一种,则,将属性元素集中在基本元素集合中,判断位于基本元素集合中的各个java对象对应的属性元素是否存在引用关系,是,则将存在引用关系的java对象进行集中后形成对象图,否,则不进行操作。
进一步的,所述对象实例模块具体为:对象图包含从根对象开始的所有对象的关联关系,以及每个对象对其他对象的依存关系;依靠对象图,给定根对象实例,从根对象出发,所有直接挂靠在根对象下的对象得到一个集合,使用这个集合信息从根对象实例中取得所有直接挂靠在根对象实例下的对象实例;每次取得的实例都放入同一个对象实例集合中;重复这个过程,直到没有新的对象被发现。
进一步的,所述序列化模块具体为:将所有对象实例的类名进行序列化后存储在二进制的数据结构体的头部,按照编号顺序将所有对象实例的内容值进行序列化后存储在二进制的数据结构体的中段。
本发明具有如下优点:本发明对开发程序中java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,从根对象的元数据信息集合中上分析对象的构成,进行对象实例;将对象实例集合中的各对象实例进行编号,将所有对象实例按编号顺序进行序列化后存储于一二进制的数据结构体中,本发明提高了序列化的性能,提高了逆序列化的速度,避免了Java反射造成的性能损耗。
附图说明
图1为本发明方法流程示意图。
图2为本发明解析java对象并且生成对象图的流程示意图。
图3为本发明根据对象图得到该对象下引用的所有对象实例的流程示意图。
图4为本发明系统的结构示意图。
具体实施方式
请参阅图1至图3所示,本发明的一种java对象序列化的方法,包括如下步骤:
步骤1、对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,并将对象图和该对象图的根对象(也就是对象图分析的源头)的信息一起当做元数据信息存储于所述根对象的元数据信息集合中,后续使用就不必在做分析;其中,对于一个java对象而言,其本身并不是孤立的。通常一个java对象内部可能也会有其他对象的引用。如果要完整的序列化一个java对象,则需要将其连带的java对象也都序列化。这样的一个全面的对象体系称之为对象图。
步骤2、将根对象的元数据信息集合中所有存在引用关系的java对象进行对象实例,并存储于一对象实例集合中;即从根对象出发,所关联的对象信息都在对象图中,此时根据对象图即可得到该对象下引用的所有对象实例。
步骤3、将对象实例集合中的各对象实例进行编号,将根对象的根对象实例标记为0号,其余根据对象实例的引用关系的顺序从0后进行编号;(例如:根对象实例标记为0,则下面的对象实例分别为1、2、3、4…..)之所以采用步骤3,是因为序列化对象是为了反序列化服务的。而得到整个对象实例集合,最后也是为了还原出根对象。而在反序列化的时候,这些对象实例如何拼装就成了一个问题。因为在序列化之后,每一个对象实例中对其他java对象的引用存放的是实际的内存地址,而这样的数据肯定是没办法还原的,因为还原的环境和序列化的环境是不同的。将对象实例间的引用关系采用编号进行,代替了实际的内存地址,这样在反序列化的时候,如果一个java对象需要引用另外一个java对象,只要在引用位置将编号替换成实际的对象即可。
步骤4、将所有对象实例按编号顺序进行序列化后存储于一二进制的数据结构体中。
参阅图2所示,所述步骤1中对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,具体为:获取开发程序中各个java对象下所有的属性元素;判断每一个属性元素是否是基本类型,或是否是基本类型的包装类型,或是否是基本类型的数组,或是否是基本类型的包装类型的数组;都不是,则将该元素进行记录,再分析下一个对象;属性元素是四种情况中的一种,则,将属性元素集中在基本元素集合中,判断位于基本元素集合中的各个java对象对应的属性元素是否存在引用关系,是,则将存在引用关系的java对象进行集中后形成对象图,否,则不进行操作。
参阅图3所示,所述步骤2具体为:对象图包含从根对象开始的所有对象的关联关系。以及每个对象对其他对象的依存关系。依靠对象图,给定根对象实例,从根对象出发,所有直接挂靠在根对象下的对象得到一个集合,使用这个集合信息从根对象实例中取得所有直接挂靠在根对象实例下的对象实例。在以这些对象实例为新的根对象,以他们各自的对象图获取直接挂靠对象实例。每次取得的实例都放入同一个对象实例集合中。重复这个过程,直到没有新的对象被发现。
所述步骤4具体为:将所有对象实例的类名进行序列化后存储在二进制的数据结构体的头部,按照编号顺序将所有对象实例的内容值进行序列化后存储在二进制的数据结构体的中段。
请参阅图4所示,本发明的一种java对象序列化的系统,所述系统包括对象图形成模块、对象实例模块、对象实例编号模块以及序列化模块;
所述对象图形成模块,用于对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,并将对象图和该对象图的根对象的信息一起当做元数据信息存储于所述根对象的元数据信息集合中;
所述对象实例模块,用于将根对象的元数据信息集合中所有存在引用关系的java对象进行对象实例,并存储于一对象实例集合中;
所述对象实例编号模块,用于将对象实例集合中的各对象实例进行编号,将根对象的根对象实例标记为0号,其余根据对象实例的引用关系的顺序从0后进行编号;
所述序列化模块,用于将所有对象实例按编号顺序进行序列化后存储于一二进制的数据结构体中。
其中,所述对象图形成模块中对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,具体为:获取开发程序中各个java对象下所有的属性元素;判断每一个属性元素是否是基本类型,或是否是基本类型的包装类型,或是否是基本类型的数组,或是否是基本类型的包装类型的数组;都不是,则将该元素进行记录,再分析下一个对象;属性元素是四种情况中的一种,则,将属性元素集中在基本元素集合中,判断位于基本元素集合中的各个java对象对应的属性元素是否存在引用关系,是,则将存在引用关系的java对象进行集中后形成对象图,否,则不进行操作。
所述对象实例模块具体为:对象图包含从根对象开始的所有对象的关联关系。以及每个对象对其他对象的依存关系。依靠对象图,给定根对象实例,从根对象出发,所有直接挂靠在根对象下的对象得到一个集合,使用这个集合信息从根对象实例中取得所有直接挂靠在根对象实例下的对象实例。在以这些对象实例为新的根对象,以他们各自的对象图获取直接挂靠对象实例。每次取得的实例都放入同一个对象实例集合中。重复这个过程,直到没有新的对象被发现。
所述序列化模块具体为:将所有对象实例的类名进行序列化后存储在二进制的数据结构体的头部,按照编号顺序将所有对象实例的内容值进行序列化后存储在二进制的数据结构体的中段。
总之,本发明的序列化采用元对象分析方法,在序列化后会分析对象特征,后续直接采用该特征进行序列化行为。一次分析,处处使用。且该序列化采用私有协议,协议中去除了对象属性名称等内容,通过对元数据分析的使用,可以保证序列化的二进制数据结构体中无包含无关信息,序列化的二进制字节码的内容相当的少,提高了序列化的性能,提高了逆序列化的速度,避免了Java反射造成的性能损耗。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

Claims (8)

1.一种java对象序列化的方法,其特征在于:包括如下步骤:
步骤1、对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,并将对象图和该对象图的根对象的信息一起当做元数据信息存储于所述根对象的元数据信息集合中;
步骤2、将根对象的元数据信息集合中所有存在引用关系的java对象进行对象实例,并存储于一对象实例集合中;
步骤3、将对象实例集合中的各对象实例进行编号,将根对象的根对象实例标记为0号,其余根据对象实例的引用关系的顺序从0后进行编号;
步骤4、将所有对象实例按编号顺序进行序列化后存储于一二进制的数据结构体中。
2.根据权利要求1所述的一种java对象序列化的方法,其特征在于:所述步骤1中对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,具体为:获取开发程序中各个java对象下所有的属性元素;判断每一个属性元素是否是基本类型,或是否是基本类型的包装类型,或是否是基本类型的数组,或是否是基本类型的包装类型的数组;都不是,则将该元素进行记录,再分析下一个对象;属性元素是四种情况中的一种,则,将属性元素集中在基本元素集合中,判断位于基本元素集合中的各个java对象对应的属性元素是否存在引用关系,是,则将存在引用关系的java对象进行集中后形成对象图,否,则不进行操作。
3.根据权利要求1所述的一种java对象序列化的方法,其特征在于:所述步骤2具体为:对象图包含从根对象开始的所有对象的关联关系,以及每个对象对其他对象的依存关系;依靠对象图,给定根对象实例,从根对象出发,所有直接挂靠在根对象下的对象得到一个对象实例集合,使用这个对象实例集合信息从根对象实例中取得所有直接挂靠在根对象实例下的对象实例;每次取得的实例都放入同一个对象实例集合中;重复这个过程,直到没有新的对象被发现。
4.根据权利要求1所述的一种java对象序列化的方法,其特征在于:所述步骤4具体为:将所有对象实例的类名进行序列化后存储在二进制的数据结构体的头部,按照编号顺序将所有对象实例的内容值进行序列化后存储在二进制的数据结构体的中段。
5.一种java对象序列化的系统,其特征在于:所述系统包括对象图形成模块、对象实例模块、对象实例编号模块以及序列化模块;
所述对象图形成模块,用于对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,并将对象图和该对象图的根对象的信息一起当做元数据信息存储于所述根对象的元数据信息集合中;
所述对象实例模块,用于将根对象的元数据信息集合中所有存在引用关系的java对象进行对象实例,并存储于一对象实例集合中;
所述对象实例编号模块,用于将对象实例集合中的各对象实例进行编号,将根对象的根对象实例标记为0号,其余根据对象实例的引用关系的顺序从0后进行编号;
所述序列化模块,用于将所有对象实例按编号顺序进行序列化后存储于一二进制的数据结构体中。
6.根据权利要求5所述的一种java对象序列化的系统,其特征在于:所述对象图形成模块中对开发程序中一个java对象进行解析,将与解析的该java对象存在引用关系的其他java对象进行集中后形成对象图,具体为:获取开发程序中各个java对象下所有的属性元素;判断每一个属性元素是否是基本类型,或是否是基本类型的包装类型,或是否是基本类型的数组,或是否是基本类型的包装类型的数组;都不是,则将该元素进行记录,再分析下一个对象;属性元素是四种情况中的一种,则,将属性元素集中在基本元素集合中,判断位于基本元素集合中的各个java对象对应的属性元素是否存在引用关系,是,则将存在引用关系的java对象进行集中后形成对象图,否,则不进行操作。
7.根据权利要求5所述的一种java对象序列化的系统,其特征在于:所述对象实例模块具体为:对象图包含从根对象开始的所有对象的关联关系,以及每个对象对其他对象的依存关系;依靠对象图,给定根对象实例,从根对象出发,所有直接挂靠在根对象下的对象得到一个对象实例集合,使用这个对象实例集合信息从根对象实例中取得所有直接挂靠在根对象实例下的对象实例;每次取得的实例都放入同一个对象实例集合中;重复这个过程,直到没有新的对象被发现。
8.根据权利要求5所述的一种java对象序列化的系统,其特征在于:所述序列化模块具体为:将所有对象实例的类名进行序列化后存储在二进制的数据结构体的头部,按照编号顺序将所有对象实例的内容值进行序列化后存储在二进制的数据结构体的中段。
CN201510690629.8A 2015-10-22 2015-10-22 一种java对象序列化的方法以及系统 Active CN105335156B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510690629.8A CN105335156B (zh) 2015-10-22 2015-10-22 一种java对象序列化的方法以及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510690629.8A CN105335156B (zh) 2015-10-22 2015-10-22 一种java对象序列化的方法以及系统

Publications (2)

Publication Number Publication Date
CN105335156A CN105335156A (zh) 2016-02-17
CN105335156B true CN105335156B (zh) 2019-01-15

Family

ID=55285723

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510690629.8A Active CN105335156B (zh) 2015-10-22 2015-10-22 一种java对象序列化的方法以及系统

Country Status (1)

Country Link
CN (1) CN105335156B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108920179A (zh) * 2017-04-12 2018-11-30 中国移动通信集团福建有限公司 Java反射实现方法、装置和系统
CN112422403A (zh) * 2020-10-15 2021-02-26 中标慧安信息技术股份有限公司 一种基于即时通讯快速集成网络同步电子白板的实现方法
CN116126429B (zh) * 2022-12-06 2023-11-17 谷斗科技(上海)有限公司 一种非数据类型对象的引用持久化及其恢复的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080162511A1 (en) * 2006-12-30 2008-07-03 Theobald Dietmar C Computer file system traversal
CN101876990A (zh) * 2009-10-27 2010-11-03 用友软件股份有限公司 传递树形结构对象的方法
CN103019689A (zh) * 2012-11-21 2013-04-03 上海富欣智能交通控制有限公司 通用的对象序列化的实现方法
CN103593194A (zh) * 2013-11-21 2014-02-19 北京国双科技有限公司 对象序列化方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080162511A1 (en) * 2006-12-30 2008-07-03 Theobald Dietmar C Computer file system traversal
CN101876990A (zh) * 2009-10-27 2010-11-03 用友软件股份有限公司 传递树形结构对象的方法
CN103019689A (zh) * 2012-11-21 2013-04-03 上海富欣智能交通控制有限公司 通用的对象序列化的实现方法
CN103593194A (zh) * 2013-11-21 2014-02-19 北京国双科技有限公司 对象序列化方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
java序列化技术的探讨;晏立等;《红河学院学报》;20110831;第9卷(第4期);全文
应用XML实现Java对象序列化技术简述;许晖;《Java技术及应用的进展-第七届中国Java技术及应用交流大会文集》;20041031;全文

Also Published As

Publication number Publication date
CN105335156A (zh) 2016-02-17

Similar Documents

Publication Publication Date Title
KR101858311B1 (ko) 상태 기계에서 라우팅하기 위한 방법들 및 시스템들
CN109768970A (zh) 一种基于可配置的通用协议生成方法
CN110827008A (zh) 一种区块链节点和交易方法
CN104346274B (zh) 程序调试器及一种程序的调试方法
WO2001069455A3 (en) A system and method for analyzing a query and generating results and related questions
TW201246071A (en) Unrolling quantifications to control in-degree and/or out degree of automation
CN110297944B (zh) 分布式xml数据处理方法及系统
US9940380B2 (en) Automatic modeling of column and pivot table layout tabular data
CN103425584A (zh) 基于Java字节码的大型应用回归测试信息处理方法
CN105335156B (zh) 一种java对象序列化的方法以及系统
EP3362900B1 (en) Telemetry system extension
CN109460220A (zh) 报文预定义代码生成方法、装置、电子设备和存储介质
CN103425632A (zh) 一种序列化的方法、装置及处理器
CN113535399B (zh) 一种nfv资源调度方法、装置以及系统
CN103077192B (zh) 一种数据处理方法及其系统
CN107797823A (zh) 业务规则管理方法、装置、存储介质和计算机设备
CN105160018A (zh) 一种复制/粘贴图片的方法、装置和系统
CN112070608A (zh) 信息处理方法、装置、介质及电子设备
CN104408193B (zh) 数据可视化模型的处理方法及装置
CN112970011A (zh) 记录查询优化中的谱系
CN111159040A (zh) 一种测试数据生成方法、装置、设备及存储介质
JP4776389B2 (ja) 符号化文書復号方法及びシステム
Dietrich et al. Ros meets cassandra: Data management in smart environments with nosql
CN105335160B (zh) 一种基于jsf的web端组件敏捷开发方法
CN108073709B (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
GR01 Patent grant
GR01 Patent grant