数据导出方法和装置与流程

文档序号:13703708阅读:218来源:国知局
技术领域本发明涉及计算机技术领域,特别是涉及一种数据导出方法和装置。

背景技术:
在很多软件应用中,都有将其中大量数据导出形成文件存储在本地的需求。比如,某些软件通过控件展示二维数据,控件是指用户可视的界面元素,例如按钮、选择框等。所述二维数据是指以行列形式组成的数据结构,例如数据库中的表。二维数据以单元格为数据存储单元,其上关联了存储样式,比如单元格的字体、字号、颜色、背景等可视化内容的数据结构。在很多应用场景下,都需要将展示的二维数据导出成表格文件存储到本地中。传统技术中,将二维数据导出时会将需要导出的全部数据获取一遍,转换为内存中间模型,该内存中间模型用来缓存全部二维数据。接着再将该内存中间模型转换为第三方POI需要的内存模型,POI是一个第三方采用GPL协议的开源软件,该软件定义了一套数据标准,采用该标准的数据可通过该软件转换为Excel数据格式。再通过POI的相关接口,将数据输出到磁盘中。然而,传统的这种数据导出方法在导出的过程中会生成多个数据模型,虽然在展示二维数据的控件使用虚模式进行数据加载的情况下可以减少部分内存占用,但是如果展示二维数据的控件使用实模式进行数据加载,则不能减少内存占用。其中虚模式是指展示二维数据的控件加载数据时只会记载用户查看的数据同时回收不查看数据占用的内容,而实模式是指展示二维数据的控件加载数据时会加载需要查看的全部数据。另外,传统的这种数据导出方法由于多个数据模型的存在,也会导致内存占用率高。

技术实现要素:
基于此,有必要针对上述技术问题,提供一种能降低内存占用率的数据导出方法和装置。一种数据导出方法,所述方法包括:接收数据导出请求;从预设的数据包装器中获取数据分块大小,根据所述数据分块大小将对应的数据分块输出到预先创建的缓冲区中;当缓冲区填满时将缓冲区中的数据分块输出到磁盘中,并清空所述缓冲区;当数据分块输出完毕,合并输出的数据分块。在其中一个实施例中,所述从预设的数据包装器中获取数据分块大小,根据所述数据分块大小将对应的数据分块输出到预先创建的缓冲区中的步骤包括:向所述数据包装器查询是否还有未输出的数据分块,若是,则从所述数据包装器获取数据属性信息和数据内容,将所述数据属性信息和数据内容输出到所述缓冲区中,否则,进入所述数据分块输出完毕,合并输出的数据分块的步骤。在其中一个实施例中,所述数据为二维数据;所述从预设的数据包装器中获取数据分块大小,根据所述数据分块大小将对应的数据分块输出到预先创建的缓冲区中的步骤包括:向所述数据包装器查询是否还有未输出的数据行,若是,则将所述数据行中的单元格的内容和属性信息输出到所述缓冲区中,进一步向所述数据包装器查询是否还有未输出的单元格,若是,则继续将单元格的内容和属性信息到缓冲区中,否则进入当缓冲区填满时将缓冲区中的数据分块输出到磁盘中,并清空所述缓冲区的步骤;当查询到没有未输出的数据行时,进入当数据分块输出完毕,合并输出的数据分块的步骤。在其中一个实施例中,所述缓冲区的大小与所述数据分块大小相同。在其中一个实施例中,所述合并输出的数据分块的步骤包括:按照数据分块输出的顺序合并所述输出的数据分块。一种数据导出装置,所述装置包括:请求接收模块,用于接收数据导出请求;数据输出模块,用于从预设的数据包装器中获取数据分块大小,根据所述数据分块大小将对应的数据分块输出到预先创建的缓冲区中;数据存储模块,用于当缓冲区填满时将缓冲区中的数据属性信息和数据分块输出到磁盘中,并清空所述缓冲区;数据合并模块,用于当数据分块输出完毕,合并输出的数据分块。在其中一个实施例中,所述数据输出模块用于向所述数据包装器查询是否还有未输出的数据分块,若是,则从所述数据包装器获取数据属性信息和数据内容,将所述数据属性信息和数据内容输出到所述缓冲区中,否则通知所述数据合并模块合并输出的数据分块。在其中一个实施例中,所述数据为二维数据;所述数据输出模块用于向所述数据包装器查询是否还有未输出的数据行,若是,则将所述数据行中的单元格的内容和属性信息输出到所述缓冲区中,进一步向所述数据包装器查询是否还有未输出的单元格,若是,则继续逐个输出单元格到缓冲区中,否则通知数据存储模块当缓冲区填满时将缓冲区中的数据分块输出到磁盘中,并清空所述缓冲区;所述数据处理模块还用于当查询到没有未输出的数据行时,通知所述数据合并模块合并输出的数据分块。在其中一个实施例中,所述缓冲区的大小与所述数据分块大小相同。在其中一个实施例中,所述数据合并模块用于按照数据分块输出的顺序合并所述输出的数据分块。上述数据导出方法和装置,通过从预设的数据包装器中获取数据分块大小,根据数据分块大小将数据分块输出到预先创建的缓冲区中,缓冲区填满时则将缓冲区中的数据分块输出到磁盘中,并清空缓冲区,当数据分块输出完毕,再合并输出的数据分块。相对于现有技术,由于不需要多个数据模型的存在,降低了内存占用率。且通过数据包装器就可以获取到数据分块大小,缓冲区填满后其中的内容就输出到磁盘中并清空缓冲区,只要针对数据分块大小创建相应的缓冲区即可实现数据导出,从而降低了内存占用率,使得业务系统可以响应更多的用户请求。附图说明图1为一个实施例中数据导出方法的原理图;图2为一个实施例中数据导出方法的流程图;图3为另一个实施例中数据导出方法的流程图;图4为再一个实施例中数据导出方法的流程图;图5为一个实施例中数据导出装置的结构框图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明所提供的数据导入方法,采用数据包装器定义数据属性信息和数据分块大小,在需要导出数据时,根据数据包装器定义的内容创建缓冲区,获取数据分块并输出到缓冲区中。以二维数据为例,如图1所示,数据包装器可以理解为数据获取接口标准,可由第三方使用者预先定义好并嵌入到软件中。在需要导出二维数据时,通过数据包装器获取到数据分块,将数据分块最终输出到磁盘中。如图2所示,在一个实施例中,提供了一种数据导出方法,包括:步骤202,接收数据导出请求。本实施例中,可通过界面上设置的控件接收数据导出请求。步骤204,从预设的数据包装器中获取数据分块大小,根据数据分块大小将对应的数据分块输出到预先创建的缓冲区中。本实施例中,数据包装器中指定了数据分块大小,数据分块可理解为整体数据的逻辑分块,并不要求整体数据结构中有该数据结构的定义。数据分块大小也就是数据输出的单位。可根据数据分块大小创建缓冲区,优选的,创建的缓冲区大小与数据分块大小相同,使得缓冲区中正好存储一个数据分块。进一步的,根据数据分块大小获取到数据分块,数据分块包含数据属性信息和数据内容。以二维数据为例,数据属性信息可以是数据表的行数、列数、单元格中是否有内容、内容的格式、字体颜色、背景颜色等等。步骤206,当缓冲区填满时将缓冲区中的数据分块输出到磁盘中,并清空缓冲区。本实施例中,可将数据分块输出到缓冲区后刷新缓冲区,判断缓冲区是否填满,如果填满,说明缓冲区没有更多的空间存储数据分块,应将缓冲区中的内容输出到磁盘中,然后清空缓冲区,清空后的缓冲区可用于接收新输出的数据分块。进一步的,可在将数据区中的数据分块输出到磁盘中时,记录数据分块的输出顺序。步骤208,当数据分块输出完毕,合并输出的数据分块。本实施例中,可向数据包装器查询是否还有输出的数据,如果没有输出的数据,则说明数据分块已都输出完毕。此时可将缓冲区中的内容再输出到磁盘中,并合并磁盘中存储的所有数据分块。进一步的,可按照数据分块的输出顺序进行合并。本实施例中,通过从预设的数据包装器中获取数据分块大小,根据数据分块大小将数据分块输出到预先创建的缓冲区中,缓冲区填满时则将缓冲区中的数据分块输出到磁盘中,并清空缓冲区,当数据分块输出完毕,再合并输出的数据分块。相对于现有技术,由于不需要多个数据模型的存在,降低了内存占用率。且通过数据包装器就可以获取到数据分块大小,缓冲区填满后其中的内容就输出到磁盘中并清空缓冲区,只要针对数据分块大小创建相应的缓冲区即可实现数据导出,从而降低了内存占用率,使得业务系统可以响应更多的用户请求。在一个实施例中,从预设的数据包装器中获取数据分块大小,根据数据分块大小将对应的数据分块输出到预先创建的缓冲区中的步骤包括:向数据包装器查询是否还有未输出的数据分块,若是,则从数据包装器获取数据属性信息和数据内容,将数据属性信息和数据内容输出到缓冲区中,否则进入当数据分块输出完毕,合并输出的数据分块的步骤。在一个实施例中,数据为二维数据,则从预设的数据包装器中获取数据分块大小,根据数据分块大小将对应的数据分块输出到预先创建的缓冲区中的步骤包括:向数据包装器查询是否还有未输出的数据行,若是,则将数据行中的单元格的内容和属性信息输出到缓冲区中,进一步向数据包装器查询是否还有未输出的单元格,若是,则继续将单元格的内容和属性信息输出到缓冲区中,否则进入当缓冲区填满时将缓冲区中的数据分块输出到磁盘中,并清空缓冲区的步骤;当查询到没有未输出的数据行时,进入当数据分块输出完毕,合并输出的数据分块的步骤。在一个实施例中,如图3所示,在一个实施例中,数据导入方法包括:步骤302,接收数据导出请求。步骤304,向数据包装器查询是否还有未输出的数据分块,若是,则进入步骤308,否则进入步骤312。步骤308,从数据包装器获取数据属性信息和数据内容,将数据属性信息和数据内容输出到缓冲区中。步骤310,当缓冲区填满时将缓冲区中的内容输出到磁盘中,并清空缓冲区,返回步骤304。本实施例中,数据包装器中定义了数据属性信息和数据分块大小,其中数据属性信息可以是诸如数据内容的格式、背景颜色、字体颜色等信息。接收到数据导出请求时,根据数据包装器提供的数据分块大小创建缓冲区,优选的,创建的缓冲区的大小与数据分块大小相同。进一步的,向数据包装器查询是否还有未输出的数据分块,如果还有,则从数据包装器获取数据属性信息和数据内容,将数据属性信息和数据内容输出到缓冲区中。然后刷新缓冲区,判断缓冲区是否填满,如果缓冲区中存储了一个数据分块,则缓冲区填满,将缓冲区中的内容输出到磁盘中,并记录数据分块的输出顺序。然后清空缓冲区,以便接收新输出的数据分块。步骤312,合并输出的数据分块。本实施例中,向数据包装器查询到有未输出的数据分块,则输出数据分块,并继续查询,当查询到没有输出的数据分块,表明数据分块都输出完毕,将缓冲区中的内容输出到磁盘后,再合并磁盘中存储的数据分块。具体的,可按照数据分块的输出顺序进行合并。在一个实施例中,需要导出的数据是二维数据,例如数据库中的表。如图4所示,数据导出方法包括:步骤402,接收数据导出请求。本实施例中,可通过界面提供的控件接收数据导出请求。步骤404,向数据包装器查询是否还有未输出的数据行,若是,则进入步骤408,否则进入步骤406。步骤406,合并输出的数据分块。步骤408,输出数据行中的单元格到缓冲区中。步骤410,向数据包装器查询是否还有未输出的单元格,若是,则返回步骤408,否则进入步骤412。本实施例中,根据数据包装器中定义的数据分块大小创建相同大小的缓冲区。向数据包装器查询是否还有未输出的数据行,如果数据行未输出完,则仅需输出数据行中的单元格到缓冲区。具体的,可从数据包装器获取单元格的属性和内容,其中,单元格的属性包括单元格的边框、背景色、是否有内容、内容格式等信息。将单元格的属性和内容一起输出到缓冲区中。每输出一个单元格,就向数据包装器查询是否还有未输出的单元格,如果还有,则继续输出数据行中的下一个单元格到缓冲区中。如果查询到没有输出的单元格,也就是该数据行中的单元格都已经输出完毕,则开始刷新缓冲区,判断缓冲区是否填满。步骤412,判断缓冲区是否填满,若是,则进入步骤414,否则返回步骤404。步骤414,将缓冲区中的内容输出到磁盘中,并清空缓冲区。本实施例中,再没输出一个数据行,则判断缓冲区是否被填满,如果被填满,则表明缓冲区没有更多的空间缓存数据,将缓冲区中的内容输出到磁盘中进行存储,记录数据行输出的顺序。然后清空缓冲区,进入步骤404,以便将未输出的数据继续输出到缓冲区中。进一步的,当向数据包装器查询到没有未输出的数据行时,说明数据行都已输出完毕,此时合并输出的数据分块。具体的,可将缓冲区的内容再输出到磁盘中,然后将磁盘中存储的数据分块合并起来。可以理解,本实施例中,数据分块合并起来后形成Excel表格文件,优选的,生成Excel2007格式的表格文件。本实施例中,在需要导出二维数据时,通过数据包装器获取数据分块大小,创建大小相同的缓冲区,将数据行中的单元格先输出到创建的缓冲区中,缓冲区填满则输出到磁盘中,并清空缓冲区,当数据行中的数据都输出完毕,则合并磁盘中存储的数据分块,生成表格文件。由于不需要多个数据模型的存在,降低了内存占用率。且通过数据包装器就可以获取到数据分块大小,缓冲区填满后其中的内容就输出到磁盘中并清空缓冲区,只要针对数据分块大小创建相应的缓冲区即可实现数据导出,从而降低了内存占用率,使得业务系统可以响应更多的用户请求。另外,通过数据包装器定义了单元格的属性,生成的表格文件能够保留原来二维数据中的属性,比如边框、背景等,使得数据导出更加精确。通过数据包装器,只要定义几个简单的接口标准即可实现数据导出,使得实现起来更容易。而由于可通过数据包装器指定数据分块大小,第三方使用者可以通过数据包装器来动态调整数据分块大小,也就是缓冲区大小,可以实现根据使用场景动态的调整缓冲区占用的内容大小,使用起来更加灵活。如图5所示,在一个实施例中,提供了一种数据导出装置,包括:请求接收模块502,用于接收数据导出请求。数据输出模块504,用于从预设的数据包装器中获取数据分块大小,根据所述数据分块大小将对应的数据分块输出到预先创建的缓冲区中。数据存储模块506,用于当缓冲区填满时将缓冲区中的数据属性信息和数据分块输出到磁盘中,并清空所述缓冲区。数据合并模块508,用于当数据分块输出完毕,合并输出的数据分块。在一个实施例中,所述数据输出模块504用于向所述数据包装器查询是否还有未输出的数据分块,若是,则从所述数据包装器获取数据属性信息和数据内容,将所述数据属性信息和数据内容输出到所述缓冲区中,否则通知所述数据合并模块合并输出的数据分块。在一个实施例中,所述数据为二维数据;所述数据输出模504块用于向所述数据包装器查询是否还有未输出的数据行,若是,则将所述数据行中的单元格的内容和属性信息输出到所述缓冲区中,进一步向所述数据包装器查询是否还有未输出的单元格,若是,则继续逐个输出单元格到缓冲区中,否则通知数据存储模块当缓冲区填满时将缓冲区中的数据分块输出到磁盘中,并清空所述缓冲区;所述数据处理模块还用于当查询到没有未输出的数据行时,通知所述数据合并模块合并输出的数据分块。在一个实施例中,所述缓冲区的大小与所述数据分块大小相同。在一个实施例中,所述数据合并模块508用于按照数据分块输出的顺序合并所述输出的数据分块。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1