一种数据导出方法、装置及系统
技术领域
本申请涉及数据处理技术领域,尤其涉及一种数据导出方法、装置及系统。
背景技术
Web(World Wide Web,全球广域网)端页面是一个按照HTML格式组织起来的文件。在通过Web进行信息查询时,以信息页面的形式出现,它可包括图形、文字、声音和视像等信息。Web端页面向用户展示了大量的信息,以便用户获取有用的资源,同时,用户还能将页面中符合自己需求的数据导出,以实现数据的获取。
但是,Web页面导出数据的不确定性使得每一个导出功能都要有一个与之对应的方法,针对需要导出的数据,通过硬性、重复编码来实现页面上的多个导出功能,如果用户的需求发生变更,则需要改变原有的代码,这种操作几乎等同于重新开始编码。这样的方案显然对大量的导出数据的页面是不可取的,不但浪费了时间和精力,也在很大程度上提高了后期的维护成本。
所以,如何在减少重复编码的基础上导出不同的数据成为亟待解决的问题。
发明内容
本申请提供了一种数据导出方法、装置及系统,以解决目前导出不同数据需要重复编码的问题。
一方面,本申请提供了一种数据导出方法,包括:
获取导出标识及其对应的导出配置,所述导出标识用于区分所述导出配置,所述导出配置包括导出字段;
建立缓存标识与所述导出标识之间的对应关系;
根据所述导出配置和所述对应关系,导出所述缓存标识对应数据的导出字段。
可选的,所述建立缓存标识与所述导出标识之间的对应关系的步骤包括:
根据查询指令,随机生成一个与待导出数据对应的缓存标识,所述查询指令包括所述待导出数据的查询条件,所述缓存标识用于标志所述待导出数据的查询条件;
绑定所述缓存标识与所述导出标识,以建立所述缓存标识与所述导出标识之间的对应关系。
可选的,所述根据导出配置和所述对应关系,导出所述缓存标识对应数据的导出字段的步骤包括:
根据导出请求,获取所述缓存标识和所述导出标识的对应关系;
根据所述对应关系,获取与所述缓存标识对应的导出标识;
根据所述导出标识,确定与所述导出标识对应的导出配置;
根据所述导出配置,导出所述缓存标识对应数据的导出字段。
可选的,所述根据所述导出标识,确定与所述导出标识对应的导出配置的步骤中,确定导出配置的方法为反射机制。
可选的,所述根据导出配置,导出所述缓存标识对应数据的导出字段的步骤包括:
根据所述导出配置,导出数据库中与所述导出配置相关的数据;
根据所述缓存标识,筛选所述数据;
导出所述筛选后数据的导出字段。
可选的,所述根据导出配置和所述对应关系,导出所述缓存标识对应数据的导出字段之后还包括:
对导出字段中的数据进行组装;
利用POI组件以及文件流写入的方式将组装的数据渲染至数据表格中;
导出所述数据表格。
可选的,所述导出标识用于表示数据表格的头信息,以及所述缓存标识用于表示数据表格的数据信息。
可选的,所述导出配置还包括:导出的类、导出方法、导出字段类型、字段中文名和字段长度。
第二方面,本申请提供一种数据导出装置,包括:
存储模块,用于获取导出标识及其对应的导出配置,所述导出标识用于区分所述导出配置,所述导出配置包括导出字段;
关系建立模块,用于建立缓存标识与所述导出标识之间的对应关系;
数据导出模块,用于根据所述导出配置和所述对应关系,导出所述缓存标识对应数据的导出字段。
第三方面,本申请提供一种数据导出系统,所述系统包括存储器和处理器;
所述存储器用于存储所述处理器的可执行程序;
所述处理器被配置为:
获取导出标识及其对应的导出配置,所述导出标识用于区分所述导出配置,所述导出配置包括导出字段;
建立缓存标识与所述导出标识之间的对应关系;
根据所述导出配置和所述对应关系,导出所述缓存标识对应数据的导出字段。
由以上技术方案可知,本申请提供一种数据导出方法、装置及系统,利用缓存标识与导出标识之间的关系,获得相对应的缓存标识与导出标识,进而可以获取预先设定的导出配置,根据导出配置导出需要的数据的导出字段;同时,缓存标识还具有筛选的作用,利用缓存标识筛选出数据,可以根据更加准确的结果。本申请提供的技术方案中,由于预先设置了导出配置,以及缓存标识与导出标识之间存在对应关系,所以当用户导出数据的需求发生变化时,无需重复编码,只需要通过简单的修改配置,就可以完成不同数据的导出功能,减少了页面导出功能的发开,提高了复用性。同时,通过页面进行配置,也使配置的内容更加直观,配置的结果一目了然。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施案例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种数据导出方法的流程图;
图2为本申请实施例提供的一种导出配置示意图;
图3为本申请实施例提供的步骤102的流程图;
图4为本申请实施例提供的步骤103的流程图;
图5为本申请实施例提供的一种导出页面的示意图;
图6为本申请实施例提供的步骤304的流程图;
图7为本申请实施例提供的另一种数据导出方法的流程图;
图8为本申请实施例提供的一种数据导出装置的结构图;
图9为本申请实施例提供的关系建立模块802的结构图;
图10为本申请实施例提供的数据导出模块803的结构图;
图11为本申请实施例提供的字段导出模块1004的结构图;
图12为本申请实施例提供的另一种数据导出装置的结构图;
图13为本申请实施例提供的一种数据导出系统的结构图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
Web也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。
用户在通过Web进行信息查询时,信息以信息页面的形式出现,向用户展示了大量的信息,以便用户获取有用的资源,同时,用户还能将页面中符合自己需求的数据导出,以实现数据的获取。由于目前Web页面导出数据要针对需要导出的数据,通过硬性、重复编码来实现页面上的多个导出功能,如果用户的需求发生变更,则需要改变原有的代码,这种操作几乎等同于重新开始编码,所以,这样的方案对大量的导出数据的页面来说,不但浪费了时间和精力,也在很大程度上提高了后期的维护成本。因此,本申请实施例中提供了一种数据导出的方法,用于页面数据的导出,减少了重复编码的过程。
参见图1,本申请实施例提供一种数据导出方法,包括:
步骤101,获取导出标识及其对应的导出配置,导出标识用于区分所述导出配置,导出配置包括导出字段。导出配置通常是由操作者进行设置的,操作者将配置的相关信息,如导出字段,设置成功后,将这些配置再保存到数据库中等待获取或者调用。具体的,导出配置还可以包括:导出的类、导出方法、导出字段类型字段中文名和字段长度等。
本申请实施例中以一个导出配置为例,对导出配置的产生进行说明,如图2所示,该条配置中定义了导出的类名为“SeriesServicempl”,导出方法为“queryCallcaseinfoList”,并且每一条配置都对应一个配置描述,该条配置描述为“将线索挖掘的信息数据进行导出”,另外,在配置详情中,还设置了配置的字段中文名、字段名称、字段类型、字段长度,其中,字段中文名称包括“线索名称”、“线索描述”和“创建时间”等,字段名称的类目下的名称与字段中文名称相对应,例如,从表中的内容可以看出,中文名为“线索名称”的字段名称为“seriesname”,中文名为“线索描述”的字段名称为“descinfo”,中文名为“创建时间”的字段名称为“createtime”,并且每一条字段还对应一个字段类型和字段长度,在这里,字段类型可以选择,字段长度也可以任意设置。本申请实施例中预先设置导出配置,这样,当用户需要导出数据时,只需找到配置里该数据导出所需的类、方法、字段以及字段类型,进而通过这些配置中的方法导出数据。当用户对数据的需求发生变化时,仅仅需要简单的改变配置中的相关内容,即可将配置与变化后的数据相关联,这样无需再对变化后的数据导出进行重新编码,节省了资源。
优选地,在每条配置详情中还设有可自定义的数据格式和操作符号,操作符号分为代表增加的“+”符号和代表减少的“-”符号,点击“+”或者“-”可以增加或者减少配置详情中的字段的数据,例如,如果操作者想减少“创建时间”这一项,点击“-”即可去掉这一项,如果想继续减少“线索名称”这一项,继续点击“-”即可,反之,如果操作者想增加“线索名称”这一项,点击“+”即可。这种设置使得配置的过程更加简洁清楚,需要进行配置时,只需点击相应的按钮或者在相应的类目中填写或选择相应的名称,数值及特性,无需过多的编程操作,所有的配置只需在一个页面上完成,使得配置的结果更加清楚,一目了然。
导出标识用于区分导出配置。导出标识在导出配置设置好后生成,导出配置也可以通过人为配置,每一个导出标识都有一个与之对应的导出配置,这样利用导出标识便可以获取导出配置以及其中的配置详情。导出配置的作用就是对需求字段的数据进行导出,例如数据库中存储的数据中可能有二十多个字段,而我们仅仅需要其中的五个字段,别的字段的信息不需要,那么就可以通过设置导出配置的配置详情来实现,比如公安数据库中有无数的案件信息,不同的情况可能需要导出不同的数据和不同的字段,对于这种情况,可以根据常用需求预先设置好若干导出配置,每一条导出配置中设置不同的数据和不同的字段:例如“扫黑线索挖掘”可能只需要了解案发时间、案发地点、案件详情等,那么可以将导出配置设置为仅包含有案发时间、案发地点、案件详情等字段的配置;而有时候只需要受害人信息等,则可以再设置一个仅包含受害人信息的导出配置,这样,通过导出配置就可以很快地导出目标数据中的目标字段,筛选掉无关字段信息。而数据库中的每条导出配置都是通过导出标识来记录区分的,进而可以理解为导出标识也可以用来表示配置详情中的字段信息。
仍以图2中的导出配置为例,导出配置对应的导出标识为“扫黑线索挖掘”。当获取导出标识“扫黑线索挖掘”之后,就可以获取这一个标识对应的导出配置中的所有内容。当数据发生变化时,无需或仅仅需要更改配置中对数据特性的描述即可,例如更改字段名称、字段类型等等,这时不需要对导出程序进行重新编写,即减少了页面导出功能的开发。
步骤102,建立缓存标识与导出标识之间的对应关系。在上述实施例中,容易将导出标识理解为待导出的数据,建立缓存标识与导出标识之间的关系,便可以通过导出标识,进而获取待导出的数据。这里的缓存标识可以理解为待导出的数据的查询条件。
在实际操作时,输入一定的关键字或时间段可以先筛选出目标数据,将目标数据放在缓存中,并生成一个缓存标识进行区分。例如,需要导出发生在2017.12-2018.4时间段内的“扫黑线索挖掘”信息,一般是先调用“扫黑线索挖掘”导出标识对应的导出配置,然后筛选出2017.12-2018.4之间的案件数据,通过导出配置中的导出的类和导出方法去获取缓存标识对应的数据中的导出配置中设置好的导出字段。
实际场景中,发生在2017.12-2018.4时间段内的目标数据存放进缓存的同时,生成了一个value表示查询条件“2017.12-2018.4”,可以用key表示“扫黑线索挖掘”,并建立key与value的对应关系,当需要导出发生在2017.12-2018.4时间段内的“扫黑线索挖掘”所需的信息时,获取value和与value对应的key,通过key调用对应的导出配置,获取与导出配置相关的所有时间发生的“扫黑线索挖掘”数据,再利用value筛选出发生在2017.12-2018.4时间段内的目标数据。
值得说明的是,实际场景相同时的key是相同的,但是value不一定相同,相当于这有可能存在多种对应,即存在(key1,value1)、(key1,value2)等,这说明,导出配置可能应用在同一个场景(也就是需要导出的字段、方法、类等等是相同的),但是导出的数据是不同的。
进一步的,“相同场景”概念中的“场景”应该是包含待导出数据对应导出配置中所有数据的场景,仍以上述内容为例,“扫黑线索挖掘”的导出配置中不仅仅包含事件发生的时间,还可能包括事件发生的地点,办理事件的人员等等内容,如果我们想导出海淀区发生在2017.12-2018.4时间段内的扫黑数据,我们不仅需要确定查询条件“海淀区”,还要确定查询条件“2017.12-2018.4”,这时需要的value就有两个,分别对应“海淀区”和“2017.12-2018.4”,而这两个value都是通过导出标识“扫黑线索挖掘”从导出配置中获取数据的,此时key仍然是一个,建立的缓存标识与导出标识的对应关系就有(key,value1)和(key,value2)两个,这种情况就可以理解为“实际场景相同时的key是相同的,但是value不一定相同”。
具体的,在本申请的一个优选实施例中,如图3所示,步骤102还包括:
步骤201,根据查询指令,随机生成一个与待导出数据对应的缓存标识,查询指令包括待导出数据的查询条件,缓存标识用于标志待导出数据的查询条件及存在缓存中的相应的数据。用户想要导出数据的某些字段信息,首先需要对数据进行查询,判断数据是否是符合要求的,页面对于数据导出的显示,通常是设置一个数据查询界面,界面上包含很多数据的类目,例如数据的名称、编号、摘要或者发生时间等等,用户可以根据自己的查询需求,在相应的类目下填写或者选择正确的内容,然后再进行查询。当用户进行查询时,将满足查询条件的数据记录到缓存,系统会同时产生一个缓存标识与之对应,缓存标识可以理解为数据的查询条件,例如数据的名称、编号、摘要或者发生时间等等,利用缓存标识中的查询的条件,可以获得待导出数据,这里提到的待导出数据与前面提到的导出标识对应的待导出数据相同。并且不同的查询场景的缓存标识是唯一的,保证了查询数据的准确性。
值得说明的是,本申请实施例中的类目是指数据的类型和目录,在上述内容中,字段中文名可以作为一个类目,字段名称可以作为一个类目,字段类型和字段长度也分别可以作为一个类目,这里所说的对相应,类目进行处理,即对字段中文名、字段名称、字段类型或者字段长度下的数据进行处理。
步骤202,绑定缓存标识与导出标识,以建立缓存标识与导出标识之间的对应关系。由于导出标识用来区分导出配置,缓存标识用来表示数据的查询条件,那么将缓存标识与导出标识绑定之后,数据的查询条件与数据的导出配置便会建立对应关系。
步骤103,根据导出配置和对应关系,导出缓存标识对应数据的导出字段。在步骤102中,建立了缓存标识与导出标识之间的对应关系,由于导出标识用来区分导出配置,缓存标识用来表示数据的查询条件。
当用户点击导出按钮的时候,程序根据导出标识和缓存标识的对应关系并通过反射机制导出需要的导出的数据。
具体的,在本申请的一个优选实施例中,如图4所示,步骤103还包括:
步骤301,根据导出请求,获取缓存标识和导出标识的对应关系。当需要对数据进行导出的时候,发送数据导出请求(例如可通过点击导出按钮)时,需要将导出标识和缓存标识一并传递给系统,系统再获取缓存标识和导出标识的对应关系。
步骤302,根据对应关系,获取与缓存标识对应的导出标识。数据导出时,在页面上首先呈现的是数据查询条件,也就是缓存标识的内容,即缓存标识已知,由于缓存标识与导出标识具有对应关系,这时根据已知的缓存标识与对应关系,便可以获得与该缓存标识对应的导出标识,值得说明的是,缓存标识与导出标识并不是唯一对应,同一个缓存标识可能对应多个导出标识,同一个导出标识也可能对应多个缓存标识。
步骤303,根据导出标识,确定与导出标识对应的导出配置。由于导出标识用来区分导出配置,那么获得了导出标识,就可以获得与导出标识对应的导出配置。
步骤304,根据导出配置,导出缓存标识对应数据的导出字段。导出配置中设置了数据的一些特征,在导出数据时,根据导出配置可以获得符合要求的数据的导出字段。以图5中的内容为例,我们需要警情编号这个字段的数据,而不需要警情名称这个字段的数据,可以通过导出配置不对警情名称这个字段的数据进行配置,当导出配置完成以后,没有警情名称这个字段,页面发送请求以后通过导出配置查询出需要导出表格的字段信息,只有配置了该字段信息才会导出该字段的数据,没有配置的不对导出。
进一步的,步骤103的内容还可以用图5中的导出页面来进一步说明,在这一页面中,“警情编号”、“警情名称”、“警情摘要”、“原始类别”、“报警时间”和“管辖单位”均可作为查询的对象,当需要查询条件选择好之后,会生成缓存标识与之对应,那么与导出标识建立对应关系后,对应的导出标识可以是“警情线索挖掘”,这些查询对象都可以作为配置详情中的中文名称,然后“警情编号”对应一个字段名称、字段类型和字段长度,“警情名称”对应一个字段名称、字段类型和字段长度,依次类推,每一个查询对象都可以相对应的放入配置中,即建立了对应关系。此后,如果需要对有关于警情线索的数据进行导出,系统便可以根据页面显示的查询条件获取对应的缓存标识,再根据缓存标识及其对应关系,获得对应的导出标识,进而获得导出标识对应的导出配置,完成满足查询条件的警情线索数据的导出。由于缓存标识与导出标识之间具有对应关系,那么在数据导出时,就可以快速地由缓存标识找到导出标识,整个过程方便快捷,当警情数据发生变化时,只需在配置中更改对应的类目内容,便可以实现数据对应关系的更新,无需重新编写数据导出程序,减少人员投入,提高复用性。
进一步的,根据具有对应关系的缓存标识和导出标识,调用导出配置的步骤中,调用导出配置的方法为反射机制,利用反射机制完成对导出配置的调用并完成数据的加载。在程序层面上,要使Java程序能够运行,那么就需要让Java类要被Java虚拟机加载,Java类如果不被Java虚拟机加载,则不能正常运行。现在我们运行的所有的程序都是在编译期的时候就已经知道了所需的类已经被加载了,而在编译期不确定是哪个类被加载时,则需要反射机制在程序运行时完成类的加载、探知和自审。换言之,本申请实施例中的反射机制可以理解为将导出配置的数据格式转换为页面显示的加载数据的数据格式,保证导出配置可以为系统所用,防止格式不同导致的调用不成功的现象。
具体的,在本申请的一个优选实施例中,如图6所示,步骤304还包括:
步骤401,根据导出配置,导出数据库中与导出配置相关的数据。
步骤402,根据缓存标识,筛选数据。这个优选实施例中,在导出数据之后,还可以再获取一次该缓存标识,利用缓存标识筛选数据,例如用户在页面中首先筛选了案发日期在2018-03-03到2018-03-10期间发生的案件,我们可以通过页面搜索将符合条件的数据查询出来,而此时我们想要将我们筛选的符合条件的数据导出到表格,我们就需要在每次筛选的时候就这个缓存标识和我们想要的数据查询条件进行绑定,可以认为缓存标识即代表数据查询条件,这样后续的导出数据就是我们想要的,而不是数据库中的所有的数据。值得说明的是,本申请实施例中在同一个实际场景之中,缓存标识是可以重复使用的,也就是我们可能需要导出两张案发日期在2018-03-03到2018-03-10期间发生的案件的数据表格,此时,可以重复利用该查询条件对应的缓存标识进行操作。
步骤403,导出筛选后的数据的导出字段。
具体的,在本申请的一个优选实施例中,如图7所示,在步骤103之后,还包括:
步骤104,对导出字段中的数据进行组装,形成一个表格所需要的数据。这些数据可以包括数据本身和数据对应的导出标识信息和缓存标识信息。具体的,导出标识可以用于表示最终导出的数据表格的头信息,缓存标识可以用于表示最终导出的数据表格的数据信息。
步骤105,利用POI组件以及文件流写入的方式将组装的数据渲染至数据表格中。POI(Poor Obfuscation Implementation,简洁版的模糊实现)提供API(ApplicationProgramming Interface,应用程序编程接口)给Java程式以实现对Microsoft Office格式档案读和写的功能。利用POI组件和文件流写入的方式对组装的数据进行渲染,使数据能写入表格中,并且具有可读功能,同时使数据表格可导出。
步骤106,导出数据表格。
值得说明的是,本申请实施例中的操作者即为对导出配置进行设置的人,而用户即为需要观看数据信息或者导出数据的人,操作者和用户可以为同一个人或者同一种人,也可以不是同一个人或同一种人。
本申请提供一种数据导出方法,利用缓存标识与导出标识之间的关系,获得相对应的缓存标识与导出标识,进而可以获取预先设定的导出配置,根据导出配置导出需要的数据的导出字段;同时,缓存标识还具有筛选的作用,利用缓存标识筛选出数据,可以根据更加准确的结果。本申请提供的技术方案中,由于预先设置了导出配置,以及缓存标识与导出标识之间存在对应关系,所以当用户导出数据的需求发生变化时,无需重复编码,只需要通过简单的修改配置,就可以完成不同数据的导出功能,减少了页面导出功能的发开,提高了复用性。同时,通过页面进行配置,也使配置的内容更加直观,配置的结果一目了然。
参见图8,本申请实施例还提供了一种数据导出装置,包括:
存储模块801,用于获取导出标识及其对应的导出配置,所述导出标识用于区分所述导出配置,所述导出配置包括导出字段;
关系建立模块802,用于建立缓存标识与所述导出标识之间的对应关系;
数据导出模块803,用于根据所述导出配置和所述对应关系,导出缓存标识对应数据的导出字段。
可选的,参见图9,所述关系建立模块802包括:
缓存标识生成模块901,用于根据查询指令,随机生成一个与待导出数据对应的缓存标识,所述查询指令包括所述待导出数据的查询条件,所述缓存标识用于标志所述待导出数据的查询条件;
绑定模块902,用于绑定所述缓存标识与所述导出标识,以建立所述缓存标识与所述导出标识之间的对应关系。
可选的,参见图10,所述数据导出模块803包括:
关系获取模块1001,用于根据导出请求,获取所述缓存标识和所述导出标识的对应关系;
查询模块1002,用于根据所述对应关系,获取与所述缓存标识对应的导出标识;
配置调用模块1003,用于根据所述导出标识,确定与所述导出标识对应的所述导出配置;
字段导出模块1004,用于根据所述导出配置,导出缓存标识对应数据的导出字段。
可选的,参见图11,所述字段导出模块1004包括:
数据预导出模块1101,用于根据所述导出配置,导出数据库中与所述导出配置相关的数据;
数据筛选模块1102,用于根据所述缓存标识,筛选所述数据;
数据导出模块1103,用于导出所述筛选后的数据的导出字段。
可选的,参见图12,所述数据导出装置还包括:
数据组装模块804,用于对导出字段中的数据进行组装;
数据渲染模块805,用于利用POI组件以及文件流写入的方式将组装的数据渲染至数据表格中;
数据表格导出模块806,用于导出所述数据表格。
参见图13,本申请实施例中还提供了一种数据导出系统,该系统包括存储器1301和处理器1302;
所述存储器1301用于存储所述处理器1302的可执行程序;
所述处理器1302被配置为:
获取导出标识及其对应的导出配置,所述导出标识用于区分所述导出配置,所述导出配置包括导出字段;
建立缓存标识与所述导出标识之间的对应关系;
根据所述导出配置和所述对应关系,导出缓存标识对应数据的导出字段。
由以上技术方案可知,本申请提供一种数据导出方法、装置及系统,利用缓存标识与导出标识之间的关系,获得相对应的缓存标识与导出标识,进而可以获取预先设定的导出配置,根据导出配置导出需要的数据的导出字段;同时,缓存标识还具有筛选的作用,利用缓存标识筛选出数据,可以根据更加准确的结果。本申请提供的技术方案中,由于预先设置了导出配置,以及缓存标识与导出标识之间存在对应关系,所以当用户导出数据的需求发生变化时,无需重复编码,只需要通过简单的修改配置,就可以完成不同数据的导出功能,减少了页面导出功能的发开,提高了复用性。同时,通过页面进行配置,也使配置的内容更加直观,配置的结果一目了然。
本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。