一种调用java对象、java对象的引用地址信息的存储方法及装置
技术领域
本申请涉及计算机编程语言技术领域,尤其涉及一种调用java对象、java对象的引用地址信息的存储方法及装置。
背景技术
java语言是一种面向对象的程序设计语言,在编程过程中java语言撰写的代码解释性强,从而使得java语言被广泛使用,在日常生活中一些常用的浏览器中的java Applet由java语言所编写的。java语言使用的过程中通常需要定义或声明类,类中可以包含方法和数据。当调用类中的方法或数据时,需要先将该类实例化生成java对象,再通过该java对象来调用该类中的方法或数据。
实际应用中可能会出现,同一应用中某个模块的代码通过java语言编写,而其它模块的代码通过java语言之外的其它语言(例如C语言、C++等)编写,或者应用和***的代码分别由java语言和其它语言编写。因此程序在运行时,需要java语言能够和其它语言能够互相识别和调用。其中,其它语言在调用java语言的类中的方法时,也需要通过调用该类生成的java对象。当前,一般会通过java本地接口(java native interface,JNI)来解决其它语言调用java对象的问题。java本地接口JNI通过提供多个应用程序编程接口(applicationprogramming interface,API),使得其它语言能够通过这些API实现java对象的调用。
实际应用中,当其它语言的代码较长时,该代码运行过程中通常还会出现需要重复调用同一个java对象的情况。这时候为了便于调用,现有技术通常会将该java对象的引用地址,在java本地接口JNI通过该语言建立的数据表中进行保存。该语言的代码当需要调用该java对象时,通过查询该数据表来获取该java对象的引用地址,从而实现对该java对象的调用。
这种现有技术的问题是,由于受到语法规则的限定,java本地接口JNI通过该语言建立的数据表,通常只能保存较少量的java对象的引用地址。因此将java对象的引用地址保存在该数据表中,当需要调用的java对象的数量较多时,通常会出现java对象调用出错的现象。
发明内容
本申请实施例提供一种调用java对象、java对象的引用地址信息的存储方法及装置,用于解决现有技术中其它语言的代码调用java对象时,由于java本地接口JNI通过该语言建立的数据表中,只能保存少量的java对象的引用地址,导致java对象效用出错的问题。
本申请实施例提供了一种调用java对象的方法,该方法包括:
触发指定语言的代码对java对象的调用指令;
通过所述调用指令查询第一数据表,确定所述第一数据表中是否保存有所述java对象的引用地址信息,所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表能够保存的java对象的引用地址信息的条数;
当存在时,通过所述java对象的引用地址信息调用所述java对象;
当不存在时,通过java本地接口JNI调用所述java对象。
优选地,所述java对象的引用地址信息具体包括与所述java对象的引用地址相关联的唯一标识符;则,
所述通过所述java对象的引用地址信息调用所述java对象具体包括:
通过与所述java对象的引用地址相关联的唯一标识符调用JNI引用管理组件来获取所述java对象的引用地址,并根据所获取的java对象的引用地址调用所述java对象,所述JNI引用管理组件用于管理所述指定语言的代码通过java本地接口JNI对java对象的调用。
优选地,在通过java本地接口JNI调用所述java对象之后,所述方法还包括:将所述java对象的引用地址信息存储在第一数据表。
优选地,所述将所述java对象的引用地址信息存储在第一数据表具体包括:
生成与所述java对象的引用地址相关联的唯一标识符,并将所述唯一标识符存储在第一数据表。
优选地,所述方法还包括:在java本地接口JNI通过所述指定语言建立的第二数据表中,删除所述java对象的引用地址信息。
优选地,其特征在于,
所述指定语言的代码具体包括C语言的代码和/或C++语言的代码;和/或,
所述第一数据表具体包括java本地接口JNI通过java语言所建立的数据表。
本申请实施例还提供一种java对象的引用地址信息的存储方法,该方法包括:
当接收指定语言的代码对java对象的调用指令时,通过java本地接口JNI获取所述java对象;
将所述java对象的引用地址信息存储在第一数据表,所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表能够保存的java对象的引用地址信息的条数。
本申请实施例还提供一种调用java对象的装置,该装置包括:触发单元、判断单元、第一调用单元和第二调用单元,其中:
所述触发单元,用于触发指定语言的代码对java对象的调用指令;
所述判断单元,用于通过所述调用指令查询第一数据表,确定所述第一数据表中是否保存有所述java对象的引用地址信息,若是,则触发第一调用单元,若否,则触发第二调用单元,所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表能够保存的java对象的引用地址信息的条数;
所述第一调用单元,用于通过所述java对象的引用地址信息调用所述java对象;
所述第二调用单元,用于通过java本地接口JNI调用所述java对象。
优选的,所述java对象的引用地址信息具体包括与所述java对象的引用地址相关联的唯一标识符;则,
所述第一调用单元具体包括第一调用子单元,用于通过与所述java对象的引用地址相关联的唯一标识符调用JNI引用管理组件来获取所述java对象的引用地址,并根据所获取的java对象的引用地址调用所述java对象,所述JNI引用管理组件用于管理所述指定语言的代码通过java本地接口JNI对java对象的调用。
本申请实施例还提供一种java对象的引用地址信息的存储装置,该装置包括:获取单元和存储单元,其中:
所述获取单元,用于当接收指定语言的代码对java对象的调用指令时,通过java本地接口JNI获取所述java对象;
所述存储单元,用于将所述java对象的引用地址信息存储在第一数据表,所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表能够保存的java对象的引用地址信息的条数。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
由于在触发指定语言的代码对java对象的调用指令后,通过该调用指令查询第一数据表,根据所述第一数据表中对所述java对象的引用地址信息的保存情况来调用该java对象。并且所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表,能够保存的java对象的引用地址信息的条数。从而解决了现有技术中,由于第二数据表中能够保存的java对象的引用地址信息较少,在需要调用的java对象较多的情况下,可能会导致对这些java对象调用出错的问题。。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例1提供的一种调用java对象的方法的具体实现流程示意图;
图2为本申请实施例1提供的一种调用java对象的方法在具体应用场景下的具体实现流程示意图;
图3为本申请实施例2提供的一种java对象的引用地址的存储方法的具体实现流程示意图;
图4为本申请实施例3提供的一种调用java对象的装置的具体结构示意图;
图5为本申请实施例4提供的一种java对象的引用地址的存储装置的具体结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
如前所述,在实际应用中,由于经常会出现同一个应用的某些模块的代码通过java语言编写,而其它模块的代码通过其它语言(例如C语言、C++等)编写,或者应用和***的代码分别由java语言和其它语言编写,因此在java语言和其它语言之间通常需要能够互相调用。在其它语言调用java语言时,由于java语言自身面向对象的特点,因此如何调用java对象成为了一个重要的因素。通常情况下,可以通过java本地接口JNI来实现其它语言对java对象的调用。
另外,通常还会出现其它语言的一段代码在运行时,需要重复调用同一个java对象的情况。特别是,在代码的较长的时,这种情况更加普遍出现。现有技术中,为了便于对该java对象的调用,通常的做法是将该java对象的引用地址,在java本地接口JNI通过该语言建立的数据表中进行保存。该语言的代码当需要调用该java对象时,通过查询该数据表来获取该java对象的引用地址,从而通过该java对象的引用地址实现对该java对象的调用。
但是在实际应用中,通常会受到语法规则的限定,java本地接口JNI对应的,该语言的数据表通常只能保存较少量的java对象的引用地址。如果将java对象的引用地址保存在该数据表中,当遇到需要调用的java对象的数量较多的情况时,通常会出现无法调用的情况,严重时甚至会导致该语言的代码难以运行。
下面将以C语言的代码调用java代码中的java对象为例。在实际应用中,根据语法规则,java本地接口JNI通过C语言建立的数据表,通常只能保存512个java对象的引用地址。在C语言的代码较长的情况下,通常会出现需要调用的java对象的数量大于512的现象。这时候,如果将这些java对象的引用地址保存在该数据表中,将会出现某些java对象难以调用的情况,在严重时可能会导致该C语言的代码难以运行。
有鉴于此缺陷,本申请提供了一种调用java对象的方法,用于解决上述中,其它语言的代码通过保存在该语言的数据表中的java对象的引用地址,调用java对象时,由于该数据表能够保存的java对象的引用地址的数量较少,而导致难以调用的问题。该方法的流程示意图如图1所示,包括下述步骤:
步骤S11:触发指定语言的代码对java对象的调用指令。
在这里,指定语言的代码是指通过指定语言编写的代码,该指定语言可以是C语言、C++语言,也可以是能够通过java本地接口JNI调用java对象的其它语言。
当指定语言的代码中包含有调用java代码中的java对象的指令时,在该指定语言的代码的运行过程中,通常会触发该指令,用以进行该java对象的调用。
步骤S12:通过所述调用指令查询第一数据表,确定所述第一数据表中是否保存有所述java对象的引用地址信息,当存在时,执行步骤S13,当不存在时,执行步骤S14。
在这里,所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表,能够保存的java对象的引用地址信息的条数。
在实际应用中,由于该指定语言的代码调用的是java代码中的java对象。因此为了便于该java对象的调用,通常可以将该第一数据表通过java本地接口JNI调取java语言来建立。也就是说,所述第一数据表通常可以是java本地接口JNI通过java语言所建立的数据表。根据语法规则,通过这种方式建立的第一数据表能够保存的java对象的引用地址信息的条数,通常会大于java本地接口JNI通过该指定语言建立的第二数据表,能够保存的java对象的引用地址信息的条数。
以C语言的代码调用java代码中的java对象为例,根据语法规则,java本地接口JNI通过C语言建立的第二数据表通常只能够保存512条java对象的引用地址信息,但是java本地接口JNI通过java语言建立的第一数据表,能够保存的java对象的引用地址信息的条数通常会大于512。
通过所述调用指令查询第一数据表,确定所述第一数据表中是否保存有所述java对象的引用地址信息。在实际应用中,当java对象的调用指令被触发后,可以通过该指令查询第一数据表,根据查询结果确定该第一数据表中是否保存有该java对象的引用地址信息。
另外需要说明的是,在实际应用中,通常还可以通过一个模块来管理对java对象的调用,特别是通过java本地接口JNI对java对象的调用,可以称该模块为JNI引用管理模块(java Native Interface Reference Manager)。该模块通常可以用于管理指定语言对java语言中java对象的调用,特别是指定语言通过java本地接口JNI对java对象的调用。另外,在实际开发该模块的过程中,由于语言规则的不同,该JNI引用管理模块通常和该指定语言具有对应关系。例如,当该指定语言为C语言时,该JNI引用管理模块对应的用于管理C语言的代码通过java本地接口JNI对java对象的调用;当该指定语言为C++语言时,该JNI引用管理模块用于管理C++语言的代码通过java本地接口JNI对java对象的调用;当该指定语言为其它的语言时,该JNI引用管理模块用于管理对应语言的代码通过java本地接口JNI对java对象的调用。当然,在这里并不会对JNI引用管理组件的形式进行限定,只需要说明该JNI引用管理组件用于管理指定语言的代码通过java本地接口JNI对java对象的调用,就不会影响本发明的技术效果。
特别的,在这里的java对象的引用地址信息是指java对象的引用地址的信息,该信息用于确定该java的引用地址,所述java对象的引用地址用于通过该引用地址调用该java对象。在实际应用中,java对象的引用地址信息通常可以直接是java对象的引用地址,也可以是与所述java对象的引用地址相关联的其它信息,通过该其它信息可以确定该java对象的引用地址,该其它信息的形式可以是唯一标识符。也就是说,所述java对象的引用地址信息具体包括与所述java对象的引用地址相关联的唯一标识符。
步骤S13:当存在时,通过所述java对象的引用地址信息调用所述java对象。
当第一数据表中保存有该java对象的引用地址信息时,可以通过该java对象的引用地址信息来调用该java对象。
在实际应用中,由于java对象的引用地址信息形式的不同,通常调用该java对象的方式也不同。例如,当该java对象的引用地址信息就为java对象的引用地址时,可以直接通过该java对象的引用地址信息调用该java对象;当所述java对象的引用地址的信息具体为与所述java对象的引用地址相关联的唯一标识符时,所述通过所述java对象的引用地址信息调用所述java对象具体包括:通过与所述java对象的引用地址相关联的唯一标识符调用JNI引用管理组件来获取所述java对象的引用地址,并根据所获取的java对象的引用地址调用所述java对象,所述JNI引用管理组件用于管理所述指定语言的代码通过java本地接口JNI对java对象的调用。
步骤S14:当不存在时,通过java本地接口JNI调用所述java对象。
当第一数据表中没有保存该java对象的引用地址信息时,可以通过java本地接口JNI调用所述java代码中的所述java对象。
在实际应用中,通常还会遇到的场景是,指定语言的代码在运行时需要多次调用同一个java对象。所以为了便于对该java对象的多次调用,通常在通过java本地接口JNI调用所述java对象之后,还可以将所述java对象的引用地址信息进行保存。这样使得,在下次调用该java对象时,可以通过查询第一数据表来获取该java对象的引用地址信息,从而使得调用该java对象更加方便。因此,实际应用中的一种优选方案是,在通过java本地接口JNI调用所述java对象之后,将所述java对象的引用地址信息存储在第一数据表。
实际应用中,当java对象的引用地址信息具体为与所述java对象的引用地址相关联的唯一标识符时,将所述java对象的引用地址信息存储在第一数据表的方式可以具体包括步骤S141。
步骤S141:生成与所述java对象的引用地址相关联的唯一标识符,并将所述唯一标识符存储在第一数据表。
在这里,所生成的唯一标识符的形式也可以有多种,例如可以采用整数形式的***数字作为唯一标识符,也可以采用英文字母作为唯一标识符,也可以采用***数字加英文字母作为唯一标识符,当然也可以采用其它形式的唯一标识符。另外,生成唯一标识符的方法有很多,例如可以随机生成唯一标识符,也可以通过数值递加的方式生成唯一标识符,也可以通过其它方法生成唯一标识符,在实际应用中通常可以通过数值递加的方式生成唯一标识符。这里并不对生成唯一标识符的方法,以及唯一标识符的形式做出限定。另外,将所述唯一标识符存储在第一数据表可以通过调用JNI引用管理组件将所述唯一标识符存储在第一数据表。
当第一次调用java对象时,通常第一数据表中并没有保存有该java对象的引用地址信息,这时候可以通过java本地接口JNI调用该java对象,然后生成与该java对象的引用地址信息相关联的唯一标识符,并通过调用JNI引用管理组件将所述唯一标识符存储在第一数据表中。这样可以使得,在之后调用该java对象时,通过查询第一数据库,可以获取该java对象的引用地址信息,并根据该java对象的引用地址信息来调用该java对象,从而可以更加方便该java对象的调用。
需要进一步说明的是,实际情况下,在步骤S13中,通过该java对象的引用地址信息调用java对象时,通常也需要经过java本地接口JNI来进行调用。而根据java本地接口JNI调用java对象的规则,在调用该java对象的过程中,会将该java对象的引用地址信息,在java本地接口JNI通过该指定语言建立的第二数据表中进行保存,这一点和步骤S14中通过java本地接口JNI调用所述java对象相同。因此,在通过java本地接口JNI将该java对象调用之后,通常还可以包括步骤S15。
步骤S15:在java本地接口JNI通过所述指定语言建立的第二数据表中,删除所述java对象的引用地址信息。
当通过java本地接口JNI调用java对象时,在java对象的调用过程完成之后,还可以将第二数据库中该java对象的引用地址进行删除,这样只需要将该java对象的引用地址在第一数据库中进行保存,在实际应用中可以节省存储资源。
采用本申请实施例1中的调用java对象的方法,在触发指定语言的代码对java对象的调用指令后,通过该调用指令查询第一数据表,根据所述第一数据表中对所述java对象的引用地址信息的保存情况来调用该java对象,由于所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表,能够保存的java对象的引用地址信息的条数。从而解决了现有技术中,由于第二数据表中能够保存的java对象的引用地址信息较少,在需要调用的java对象较多的情况下,可能导致对这些java对象调用出错的问题。
需要说明的是,实施例1所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法的各步骤也可以由不同设备作为执行主体。比如,步骤S11和步骤S12的执行主体可以为设备1;又比如,步骤S11的执行主体可以为设备1,步骤S12和的执行主体可以为设备2;等等。
以上是对本申请实施例提供的调用java对象的方法的说明。为了便于理解,本申请实施例还提供了实际应用中,实施该方法的具体应用场景。该应用场景为C语言的代码调用java代码中的java对象。在该应用场景下,指定语言为C语言,指定语言的代码为C语言的代码。如表2所示,该应用场景下所示方法具体可以包括以下步骤:
步骤S21:触发C语言的代码对java代码中的java对象的调用指令;
步骤S22:通过该调用指令查询第一数据表;
所述第一数据表具体为java本地接口JNI通过java语言建立的数据表。
步骤S23:根据查询结果确定所述第一数据表中是否保存有与所述java对象的引用地址相关联的唯一标识符,若是,则执行步骤S24至步骤S26,若否,则执行步骤S27至步骤S29;
步骤S24:获取所述唯一标识符;
步骤S25:通过唯一标识符调用JNI引用管理组件来获取所述java对象的引用地址;
在这里,JNI引用管理组件用于管理C语言的代码通过java本地接口JNI对java对象的调用。
步骤S26:根据所获取的java对象的引用地址调用所述java对象;
步骤S27:通过java本地接口JNI调用所述java对象;
步骤S28:生成与所述java对象的引用地址相关联的唯一标识符;
步骤S29:通过JNI引用管理组件将生成的唯一标识符存储在第一数据表;
步骤S210:在java本地接口JNI通过C语言建立的第二数据表中,删除所述java对象的引用地址信息。
另外,需要说明的是,由于C++语言和C语言有相似的语法规则,因此本申请实施例在C++语言的代码调用java代码中的java对象过程中,与该应用场景相似的过程相似,在这里就不在另作说明。
实施例2
本申请的实施例2提供了一种java对象的引用地址的存储方法,用于解决现有技术中,通过java本地接口JNI调用java对象时,由于能够调用的java对象数量较少导致可能无法运行的问题。该方法的流程图如图3所示,该方法的步骤包括:
步骤S31:当接收指定语言的代码对java对象的调用指令时,通过java本地接口JNI获取所述java对象。
在这里,指定语言的代码是指指定语言编写的代码,该指定语言通常可以使C语言,也可以是C++语言,也可以是能够通过java本地接口JNI调用java对象的其它语言。
在实际应用中,java本地接口JNI能够提供多个应用程序编程接口(application programming interface,API),使得其它语言能够通过这些API获取所述java对象。
步骤S32:将所述java对象的引用地址信息存储在第一数据表。
在这里,所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表能够保存的java对象的引用地址信息的条数。
在实际应用中,该第一数据表的形式可以有多种,生成该第一数据表的方式也可以有多种。但是,该第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表,能够保存的java对象的引用地址信息的条数。其中,一种生成第一数据表的优选方案是,java本地接口JNI通过java语言建立该第一数据表。这样可以使得在查询该数据表示,更加容易实现。
在实际应用中,将所述java对象的引用地址信息存储在第一数据表的方式可以有多种。一种优选的方案是,通过调用JNI引用管理组件将该java对象的引用地址信息存储在第一数据表。其中,该JNI引用管理组件用于管理所述指定语言的代码通过java本地接口JNI调用java对象。
采用本申请实施例2所提供的方法,在通过java本地接口JNI获取java对象之后,将该java对象的引用地址信息保存在第一数据表中,由于第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表,能够保存的java对象的引用地址信息的条数,因此解决了现有技术的问题。
实施例3
采用与实施例1相同的发明构思,本申请的实施例3提供了一种调用java对象的装置,该装置40包括:触发单元401、判断单元402、第一调用单元403和第二调用单元404,其中:
所述触发单元401,用于触发指定语言的代码对java对象的调用指令;
所述判断单元402,用于通过所述调用指令查询第一数据表,确定所述第一数据表中是否保存有所述java对象的引用地址信息,若是,则触发第一调用单元403,若否,则触发第二调用单元404,所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表能够保存的java对象的引用地址信息的条数;
所述第一调用单元403,用于通过所述java对象的引用地址信息调用所述java对象;
所述第二调用单元404,用于通过java本地接口JNI调用所述java对象。
本申请的实施例3由于采用和实施例1相同的发明构思,因此可以取得和实施例1相同的发明效果。另外,在实际应用中,实施例3提供的装置40还能够通过和硬件装置结合,取得其它的实施效果。例如,在指定语言的代码需要调用的java对象较多时,在调用这些java对象的过程中,查询第一数据表的频率通常较高,这时候可以将该第一数据表保存在缓存中,这样可以加快调用的速度。当然,这只是该装置40结合硬件装置取得的技术效果之一,在具体实施过程中还可能会取得其它的技术效果,这里就不再一一列举。
在这里,java对象的引用地址信息是指java对象的引用地址的信息,该信息用于确定该java的引用地址,所述java对象的引用地址用于通过该引用地址调用该java对象。通常,java对象的引用地址信息可以直接是java对象的引用地址,也可以是与所述java对象的引用地址相关联的其它信息,通过该其它信息可以确定该java对象的引用地址,该其它信息的形式可以是唯一标识符。在实际应用中,一种优选的方案是,所述java对象的引用地址信息为与所述java对象的引用地址相关联的唯一标识符;则,所述第一调用单元403具体包括第一调用子单元4031,用于通过与所述java对象的引用地址相关联的唯一标识符调用JNI引用管理组件来获取所述java对象的引用地址,并根据所获取的java对象的引用地址调用所述java对象,所述JNI引用管理组件用于管理所述指定语言的代码通过java本地接口JNI对java对象的调用。
实施例4
采用与实施例2相同的发明构思,本申请还提供一种java对象的引用地址信息的存储装置,该装置50包括:获取单元501和存储单元502,其中:
所述获取单元501,用于当接收指定语言的代码对java对象的调用指令时,通过java本地接口JNI获取所述java对象;
所述存储单元502,用于将所述java对象的引用地址信息存储在第一数据表,所述第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表能够保存的java对象的引用地址信息的条数。
采用本申请实施例4所提供的该装置50,通过获取单元501获取java对象之后,将该java对象的引用地址信息通过存储单元502保存在第一数据表中,由于第一数据表能够保存的java对象的引用地址信息的条数,大于java本地接口JNI通过所述指定语言建立的第二数据表,能够保存的java对象的引用地址信息的条数,因此解决了现有技术的问题。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、***或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。