CN102508880A - 一种文件合并方法及分解方法 - Google Patents

一种文件合并方法及分解方法 Download PDF

Info

Publication number
CN102508880A
CN102508880A CN2011103165341A CN201110316534A CN102508880A CN 102508880 A CN102508880 A CN 102508880A CN 2011103165341 A CN2011103165341 A CN 2011103165341A CN 201110316534 A CN201110316534 A CN 201110316534A CN 102508880 A CN102508880 A CN 102508880A
Authority
CN
China
Prior art keywords
file
source file
source
tree structure
label information
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
Application number
CN2011103165341A
Other languages
English (en)
Other versions
CN102508880B (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.)
Changshu Intellectual Property Operation Center Co ltd
Guangdong Gaohang Intellectual Property Operation Co ltd
Original Assignee
Vtron Technologies 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 Vtron Technologies Ltd filed Critical Vtron Technologies Ltd
Priority to CN201110316534.1A priority Critical patent/CN102508880B/zh
Publication of CN102508880A publication Critical patent/CN102508880A/zh
Application granted granted Critical
Publication of CN102508880B publication Critical patent/CN102508880B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及计算机的文件系统技术,具体涉及一种文件合并方法及分解方法。文件合并方法包括如下步骤:遍历读取源文件形成源文件标记信息并存储到树形结构中;创建目标文件及相应的内存映射文件;把存储树形结构内容所占的字节数和树形结构的内容作为文件头信息先后写入到内存映射文件开始位置;根据树形结构将源文件的内容写入到内存映射文件中,写入的位置从存储树形结构内容之后开始;写操作结束后,关闭内存映射文件,形成的目标文件即是合并文件。本发明还提供一种对合并后的目标文件进行分解的文件分解方法。本发明提高了文件合并速度或分解速度,并能够在合并后的目标文件中对某个源文件进行快速查找和分解,极大地方便了用户对文件的操作。

Description

一种文件合并方法及分解方法
技术领域
本发明涉及计算机的文件系统技术,具体涉及一种文件合并方法及分解方法。
背景技术
随着信息时代的到来,计算机已经普及应用到生活中的方方面面,而用户的信息在计算机中的主要存储方式是文件和文件夹。计算机中的文件是以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等。文件通常具有三个字母的文件扩展名,用于指示文件类型。计算机中的文件夹是用来协助人们管理计算机文件的,每一个文件夹对应一块磁盘空间,它提供了指向对应空间的地址,它没有扩展名,也就不用扩展名来标识。文件夹一般采用多层次结构(如树状结构),文件夹不但可以包含文件,而且可包含下一级文件夹,这样类推下去形成的多级文件架结构既帮助了用户将不同类型和功能的文件分类储存,又方便文件查找,还允许不同文件夹中的文件拥有同样的文件名。计算机的每个用户、每个系统都在不时地跟文件/文件夹打交道。普通用户或程序设计人员,很多时候都需要将多个文件和/或文件夹合并为一个文件来存放,在使用的时候再分解为原来的文件和/或文件夹。
在使用计算机中的文件或文件夹时,我们一般会遇到以下的一些情况:
1.对于一些琐碎的小文件,用户需要合并到一起,而在使用的时候再还原。
2. 技术人员设计程序时不希望把程序的文件结构和文件内容展现给用户,所以把所有内容的文件夹和/或文件合并为一个文件,然后加密,使用时再通过程序把合并后的文件分解为原来的文件和/或文件夹。
3.现在免安装的绿色版程序越来越多,这样就需要把该绿色版程序的执行程序跟内容合并为一个文件,方便用户传播和无需安装就可以使用。
4.技术人员在设计安装程序时需要使用到文件和/或文件夹的合并技术;程序安装时,再使用文件和/或文件夹的分解技术,分解出部分或全部的文件和/或文件夹。
面对上述的文件和/或文件夹合并、分解需求,目前传统的文件合并(不包括压缩技术)技术,都只是简单地把需要合并的源文件(文件和/或文件夹)内容以二进制方式按照先后顺序合并在一个目标文件中,并在特定的位置(目标文件的头部、尾部或在每个源文件的开始位置或结束位置)记录每个源文件的信息(源文件的相对路径、字节数与偏移量)。分解时先打开合并后的目标文件,读出目标文件信息(每个源文件的字节数和偏移量)然后按照文件字节顺序读出每个源文件内容,并在磁盘中生成源文件。这种传统的文件合并、分解方法存在很多缺点:
第一,合并、分解的速度太慢,尤其是包含比较多的大文件时;
第二,文件分解时必须按顺序读取合并后的目标文件,才可以分解出源文件的结构。
第三,文件分解只能整体分解,无法快速地分解出其中的某一个源文件或不分解目标文件就直接使用其中一个源文件,即直接对目标文件进行分析,直接使用目标文件中某个源文件的内存数据。 
发明内容
本发明解决的技术问题是克服现有技术的不足,提供一种提高文件合并速度的文件合并方法。
本发明还提供了一种提高文件分解速度,并能够在合并后的目标文件中对某个源文件进行快速查找和分解的文件分解方法。
为解决上述技术问题,本发明的第一个发明目的是实现一种文件合并方法,其采用的技术方案如下:
一种文件合并方法,包括如下步骤:
进行文件合并,遍历读取源文件,形成源文件标记信息并存储到树形结构中;
创建目标文件及相应的内存映射文件;具体是根据源文件的总字节数、存储树形结构所占的字节数再加4个字节(用来存储树形结构内容的大小)创建目标文件及相应的内存映射文件;
把存储树形结构内容所占的字节数和树形结构的内容作为文件头信息先后写入到内存映射文件开始位置;
根据树形结构将源文件的内容写入到内存映射文件中,写入的位置从存储树形结构内容之后开始;
写操作结束后,关闭内存映射文件,形成的目标文件即是合并文件。
本发明使用内存映射文件技术建立目标文件(即合并后的文件)与地址进程空间的映射,然后对源文件、目标文件进行读写分析,能让应用程序使用内存操作来操纵文件,而不必要在文件里来回地读、写、移动文件指针,并采用树形结构存储源文件的标记信息,根据树形结构将源文件的内容写入到内存映射文件中,大大提高了文件合并的速度。
上述方案中,根据树形结构将源文件的内容写入到内存映射文件中的具体步骤包括:
根据当前分配的线程数C创建C个用于记录源文件序列的线程列表Lp; 
遍历树形结构获取每个源文件的标记信息和每个源文件的遍历路径,并将源文件标记信息中每个源文件的字节数作为关键字利用冒泡排序法将源文件排序,并根据排序结果将每个源文件的标记信息和遍历路径作为一个数据结构存储在数据列表Lf中;
根据源文件的总字节数S计算出每个线程需要处理的平均字节数:V= S/C;
根据平均字节数将数据列表Lf中每个源文件的标记信息、遍历路径以及文件拆分标记信息作为一个数据结构逐一循环压入到C个线程列表Lp中;压入时,若某个源文件的字节数大于平均字节数V时,则将所述某个源文件的内容分成C个部分以生成C个文件拆分标记信息,再将所述某个源文件的标记信息和遍历路径对应一个文件拆分标记信息形成C个数据结构按顺序分别压入到C个线程列表Lp中,若源文件的字节数小于平均字节数V时,则源文件不需拆分,且不需要填充其所对应数据结构中的文件拆分标记信息;当某个线程列表Lp中源文件的总字节数大于平均字节数V时,不再对所述某个线程列表Lp进行源文件分配,并进入下一个线程列表Lp中进行判断及分配;
C个线程根据线程列表Lp中的分配结果同步将源文件写入到内存映射文件中。
采用上述的线程分配方法,把需要合并的源文件的数据平均分配到各个线程中,使若干线程同步处理源文件的合并,更进一步地提高了源文件的分解速度。
上述方案中,写入头文件信息时,把存储树形结构内容所占的字节数写在内存映射文件的开始位置处,其占4个字节,再把树形结构的内容采用孩子兄弟链表表示法从内存映射文件的第5个字节处开始写入。
上述方案中,所述源文件为文件夹和/或文件;所述源文件标记信息包括文件夹名称、文件名称、文件字节数和文件在目标文件中的偏移量。
上述方案中,树形结构为多叉树结构,多叉树中根节点和分支节点存储文件夹名称,多叉树中的叶子节点存储文件的名称、文件字节数和文件在目标文件中的偏移量,若所述源文件为若干个文件夹时,多叉树的根节点的文件夹名称设置为空;
所述多叉树的分支节点为度大于0的树节点,多叉树的叶子节点为度等于0的树节点;
所述文件拆分标记信息是把源文件的内容平均分为C个部分后每部分的标记信息,其包括源文件所分块数、每部分的索引值、每部分的字节数、每部分在被拆分源文件中的位置。
本发明的第二个发明目的是实现一种文件分解方法,其采用的技术方案如下:
一种文件分解方法,包括采用权利要求1所述的合并方法合并的目标文件,包括如下步骤:
分解目标文件,根据目标文件创建内存映射文件;
读取内存映射文件的头信息,生成对应的树形结构;
分解获取全部源文件时,根据树形结构中的节点信息,读取内存映射文件中的内存块,然后生成所有源文件;
分解获取目标文件中的单个源文件时,通过遍历算法在树形结构中找到并读取所述单个源文件的标记信息;
根据获取的单个源文件标记信息在内存映射文件中读出所述单个源文件的内容并在硬盘指定位置生成所述单个源文件,或者读出所述单个源文件的内容到内存中直接使用。
该技术方案使用内存映射文件技术建立目标文件(即合并后的文件)与地址进程空间的映射,然后对源文件、目标文件进行读写分析,能让应用程序使用内存操作来操纵文件,而不必要在文件里来回地读、写、移动文件指针,并采用树形结构提取源文件的信息,大大提高了文件分解的速度。而且本技术方案进行分解时不必按顺序读取合并后的目标文件就可以分解出源文件的结构,而且当需要目标文件中的某个源文件时无需分解整个目标文件,就可以快速地从目标文件中分解出某一个源文件或不分解目标文件就直接使用某一个源文件,即直接对目标文件进行分析,直接使用目标文件中某个源文件的内存数据,极大地方便了用户对文件的操作。
上述方案中,分解获取全部源文件时,根据树形结构中的节点信息,读取内存映射文件中的内存块,然后生成所有源文件的具体步骤包括:
根据当前分配的线程数C创建用于C个记录源文件序列的线程列表Lp
遍历树形结构获取每个源文件的标记信息和每个源文件的遍历路径,并将标记信息中源文件的字节数作为关键字,利用冒泡排序法将源文件排序,并根据排序结果将每个源文件的标记信息和遍历路径作为一个数据结构存储在数据列表Lf中;
根据目标文件的总字节数S计算出每个线程需要处理的平均字节数:V= S/C;
根据平均字节数将数据列表Lf中每个源文件的标记信息、遍历路径以及文件拆分标记信息作为一个数据结构逐一循环压入到C个线程列表Lp中;压入时,若某个源文件的字节数大于平均字节数V时,则将所述某个源文件的内容分成C个部分以生成C个拆分标记信息,再将所述某个源文件的标记信息和遍历路径对应一个文件拆分标记信息形成C个数据结构按顺序分别压入到C个线程列表Lp中,若源文件的字节数小于平均字节数V时,则源文件不需拆分,且不需要填充其所对应数据结构中的文件拆分标记信息;当某个线程列表Lp中源文件的总字节数大于平均字节数V时,不再对所述某个线程列表Lp进行源文件分配,并进入下一个线程列表Lp中进行判断及分配;
C个线程根据线程列表Lp中的分配结果同步生成对应的源文件。
采用上述的线程分配方法,把需要目标文件中的数据平均分配到各个线程中,使若干线程同步处理目标文件的分解,更进一步地提高了源文件的分解速度。
上述方案中,所述树形结构为多叉树结构,源文件为文件夹和/或文件。
上述方案中,所述内存映射文件的头信息包括树形结构内容所占的字节数和树形结构的内容,树形结构内容所占的字节数位于内存映射文件的开始位置处,其占4个字节,树形结构位于内存映射文件的开始位置处,其从第5个字节开始;
所述树形结构的内容为目标文件中源文件的标记信息,包括文件夹名称、文件的名称、文件字节数和文件在目标文件中的偏移量;
生成多叉树时,多叉树中根节点和分支节点存储文件夹名称,多叉树中的叶子节点存储文件的名称、文件字节数和文件在目标文件中的偏移量,若所述源文件为若干个文件夹时,多叉树的根节点的文件夹名称设置为空;所述多叉树的分支节点为度大于0的树节点,多叉树的叶子节点为度等于0的树节点。
上述方案中,分解获取目标文件中的单个源文件时,通过遍历查找树形结构获取的的单个源文件标记信息是单个源文件的字节数和其在内存映射文件中的偏移量;
所述文件拆分标记信息是把源文件的内容平均分为C个部分后每部分的标记信息,其包括源文件所分块数、每部分的索引值、每部分的字节数、每部分在被拆分源文件中的位置。
与现有技术相比,本发明技术方案的有益效果是:
本发明使用内存映射文件技术建立目标文件(即合并后文件)与地址进程空间的映射,然后进行读写分析,能让应用程序使用内存操作来操纵文件,而不必要在文件里来回地读、写、移动文件指针。并使用树型结构存储需要合并的源文件的标记或者分解的目标文件的头文件信息,然后采用任务的多线程平均分配,把这些需要操作的源文件或目标文件平均分配到各个线程中去,多线程来同步处理文件的合并或分解,大大提高了文件的合并或分解速度,而且目标文件分解时不必按顺序读取合并后的目标文件就可以分解出源文件的结构,而且当需要目标文件中的某个源文件时无需分解整个目标文件,就可以快速地从目标文件中分解出某一个源文件或不分解目标文件就直接使用某一个源文件,即直接对目标文件进行分析,直接使用目标文件中某个源文件的内存数据,极大地方便了用户对文件的操作。
附图说明
图1 为本发明中一种文件合并方法的流程图;
图2 为本发明中生成树形结构的示意图;
图3为本发明树形结构存储在内存映射文件中的示意图;
图4为本发明多叉树向二叉树转变的过程示意图;
图5为本发明中一种文件分解方法的流程图。
具体实施方式
下面结合附图和实施例对本发明的技术方案做进一步的说明。
如图1所示,本发明公开了一种文件合并方法,包括如下步骤:
(S01)进行文件合并,遍历读取源文件,形成标记信息并存储到树形结构中;
源文件为文件夹和/或文件,其可以是多个文件进行合并,也可以是一个或者多个文件夹进行合并,也可以是一个或者多个文件夹和文件进行合并。源文件标记信息包括文件夹名称、文件的名称、文件字节数和文件在目标文件中的偏移量。树形结构为多叉树,遍历时提取源文件的目录进行读取,多叉树中根节点和分支节点存储文件夹名称,叶子节点存储文件的名称、文件字节数和文件在目标文件中的偏移量,若源文件为若干个文件夹时,多叉树中的根节点的文件夹名称设置为空,其中多叉树的分支节点为度大于0的树节点,多叉树的叶子节点为度等于0的树节点。
(S02)创建目标文件和相应的内存映射文件;具体是根据源文件的总字节数、存储树形结构所占的字节数再加4个字节(用来存储树形结构字节的大小)创建目标文件及相应的内存映射文件;然后建立目标文件与地址进程空间的映射,然后进行读写分析,能让应用程序使用内存操作来操纵文件,而不必要在文件里来回地读、写、移动文件指针。
(S03)把存储树形结构内容所占的字节数和树形结构的内容作为文件头信息先后写入到内存映射文件开始位置。首先把存储树形结构内容所占的字节数写在内存映射文件的开始位置处,其占4个字节。然后再把树形结构的内容采用孩子兄弟链表表示法从内存映射文件的第5个字节处开始写入;
(S04)根据树形结构将源文件内容写入到内存映射文件中,写入时从存储树形结构内容之后开始,其具体步骤为:
(S041)根据当前分配的线程数C创建C个线程列表Lp,线程列表Lp用于记录需要某个线程来处理的源文件序列,其中C = CPU个数×2 ,P=1,2…C,线程列表Lp中存储的内容为需处理的文件夹名称、文件的名称、、文件字节数、文件在目标文件中的偏移量、遍历路径以及文件拆分标记信息,遍历路径为源文件相对于根目录文件夹的相对路径;
(S042)遍历树形结构获取每个源文件的标记信息和每个源文件的遍历路径,并将源文件标记信息中每个源文件的字节数作为关键字利用冒泡排序法将源文件排序,并根据排序结果将每个源文件的标记信息和遍历路径作为一个数据结构存储在数据列表Lf中,遍历路径表明了文件夹与子文件夹/子文件之间的包含关系;
(S043)根据源文件的总字节数S计算每个线程需要处理的平均字节数:V= S/C;
(S044)根据平均字节数将数据列表Lf中每个源文件的标记信息、遍历路径以及文件拆分标记信息作为一个数据结构逐一循环压入到C个线程列表Lp中;压入时,若第N个源文件的字节数大于平均字节数V时,则根据第N个源文件的字节数和线程列表的个数C将第N个源文件的内容分成C个部分以生成C个文件拆分标记信息,再将第N个源文件的标记信息和遍历路径对应一个文件拆分标记信息作为一个数据结构,这样就构成C个数据结构,再将这C个数据结构按顺序分别压入到C个线程列表Lp中,若源文件的字节数小于平均字节数V时,则源文件不需拆分,且不需要填充其所对应数据结构中的文件拆分标记信息;当第M个线程列表中源文件的总字节数大于平均字节数V时,不再对第M个线程列表进行源文件分配,并进入第M+1个线程列表中进行判断及分配;拆分标记信息标记了源文件所分块数,被拆分源文件每部分的索引值,每部分包含被拆分源文件的字节数以及每部分在完整的源文件中的位置。
(S045)C个线程根据分配结果同步将源文件写入到内存映射文件中。
(S05)写操作结束后,关闭内存映射文件,形成的目标文件既是合并文件。
下面结合图2、3和4以及具体实施例对本发明中文件合并时生成树形结构以及将树形结构内容存储到内存映射文件中的具体步骤进行进一步的说明。如现需要将文件夹A合并成一个目标文件,其中文件夹A中包括子文件夹B、C、D,子文件B包括文件E和F,子文件夹C包括文件G,子文件D包括文件H、I和J。其具体步骤为:
(1)如图2所示,首先对该文件夹A进行合并,对文件夹A进行遍历读取,其是根据文件夹A的目录进行的,遍历获知文件夹A中包括子文件夹B、C、D,子文件B包括文件E和F,子文件夹C包括文件G,子文件D包括文件H、I和J,此时提取文件夹A的信息,具体是,提取文件夹A的文件夹名称A存储在多叉树的根节点1中,提取文件夹B、C、D的文件夹名称B、C、D分别存储在多叉树的节点2、3和4中,提取文件E、F、G、H、I、J的文件名称E、F、G、H、I、J以及各个文件的字节数、各个文件在目标文件中的偏移量存储在多叉树的叶子节点5、6、7、8、9、和10中。
(2)根据各个文件的字节数得到文件夹A的总字节数以及存储树形结构内容所占的字节数、以及再加上4个字节存储表示树形结构内容大小的数据创建目标文件和相应的内存映射文件。
(3)将存储树形结构内容所占的字节数存储到内存映射文件的开始位置处,其占4个字节。然后再把树形结构的内容采用孩子兄弟链表表示法从内存映射文件的第5个字节处开始写入,如图3所示。
多叉树结构存储在目标文件中,为了保证合并成的目标文件具有被读取出来还原出源文件的功能,需要将树形结构以二叉树的形式存储,孩子兄弟链表表示法可以理解为多叉树向二叉树转换的过程,如图4所示。遍历的过程就是通过该孩子兄弟链表进行先后遍历,将遍历结果为:ABE∧F∧∧CG∧∧DH∧I∧J∧∧∧∧存储在内存映射文件中。当从内存映射文件中读取遍历结果再转换成树形结构的过程与图4所示的过程相反。
如图5所示,本发明的第二个发明目的是实现一种文件分解方法,其包括通过上述合并方法合并的目标文件,包括如下步骤:
(S11)分解目标文件,根据目标文件创建内存映射文件;以建立目标文件与地址进程空间的映射,然后进行读写分析,能让应用程序使用内存操作来操纵文件,而不必要在文件里来回地读、写、移动文件指针。
(S12)读取内存映射文件的头信息,生成对应的树形结构;内存映射文件的头信息包括树形结构内容所占的字节数和树形结构的内容;首先,读取内存映射文件的前四个字节存储的内容,所述内容即为树形结构内容所占的字节数,根据树形结构内容所占的字节数,再从内存映射文件的第5个字节开始读取目标文件的树形结构内容生成对应的树形结构;
树形结构的内容为目标文件中源文件的标记信息,包括文件夹名称、文件的名称、文件字节数和文件在目标文件中的偏移量;
树形结构为多叉树结构,生成多叉树时,多叉树中根节点和分支节点存储文件夹名称,多叉树中的叶子节点存储文件的名称、文件字节数和文件在目标文件中的偏移量,若所述源文件为若干个文件夹时,多叉树的根节点的文件夹名称设置为空;所述多叉树的分支节点为度大于0的树节点,多叉树的叶子节点为度等于0的树节点。
之后,若分解全部源文件则执行步骤(S13),若分解单个源文件则执行步骤(S14)。
(S13)若分解全部源文件时,根据树形结构中的节点信息,读取内存映射文件中的内存块,然后逐生成所有源文件;其具体步骤包括:
(S131)根据当前分配的线程数C创建C个线程列表Lp,线程列表Lp用于记录目标文件中需要某个线程来处理的源文件序列,其中C = CPU个数×2 ,P=1,2…C,线程列表Lp中存储的结点包含内容为需处理的各源文件名称、文件字节数、文件在目标文件中的偏移量、遍历路径以及源文件的拆分标记信息,遍历路径即为源文件相对于根目录文件夹的相对路径;
(S132)遍历树形结构获取每个源文件的标记信息,并将标记信息中源文件的字节数作为关键字,利用冒泡排序法源文件排序并根据排序结果将每个源文件的标记信息和遍历路径作为一个数据结构存储在数据列表Lf中;
(S133)根据目标文件的总字节数S计算出每个线程需要处理的平均字节数:V= S/C;
(S134)根据平均字节数将数据列表Lf中每个源文件的标记信息、遍历路径以及文件拆分标记信息作为一个数据结构逐一循环压入到C个线程列表Lp中;压入时,若第N个源文件的字节数大于平均字节数V时,则根据第N个源文件的字节数和线程列表的个数C将第N个源文件的内容分成C个部分以生成C个文件拆分标记信息,再将第N个源文件的标记信息和遍历路径对应一个文件拆分标记信息作为一个数据结构,这样就构成C个数据结构,再将这C个数据结构按顺序分别压入到C个线程列表Lp中,若源文件的字节数小于平均字节数V时,则源文件不需拆分,且不需要填充其所对应数据结构中的文件拆分标记信息;当第M个线程列表中源文件的总字节数大于平均字节数V时,不再对第M个线程列表进行源文件分配,并进入第M+1个线程列表中进行判断及分配;拆分标记信息标记了源文件所分块数,被拆分源文件每部分的索引值,每部分包含被拆分源文件的字节数以及每部分在完整的源文件中的位置;
(S135)C个线程根据线程列表Lp中的分配结果同步生成对应的源文件。
(S14)分解目标文件中的单个源文件时,此时无需分解整个目标文件,只需对目标文件中单个源文件进行分解,其具体步骤为:
(S141)通过树的先序遍历算法,在树形结构中找到并读取单个源文件标记信息,包括文件夹名称、文件名称、文件大小、源文件在目标文件中的偏移量;
(S142)根据单个源文件标记信息,具体是单个源文件在目标文件中的偏移量以及单个源文件的字节数,在内存映射文件中读出单个源文件的内容并在硬盘指定位置生成单个源文件,或者读出单个源文件的内容到内存中直接使用。

Claims (10)

1.一种文件合并方法,其特征在于,包括如下步骤:
进行文件合并,遍历读取源文件,形成源文件标记信息并存储到树形结构中;
创建目标文件及相应的内存映射文件;
把存储树形结构内容所占的字节数和树形结构的内容作为文件头信息先后写入到内存映射文件开始位置;
根据树形结构将源文件的内容写入到内存映射文件中,写入的位置从存储树形结构内容之后开始;
写操作结束后,关闭内存映射文件,形成的目标文件即是合并文件。
2.根据权利要求1所述的文件合并方法,其特征在于,根据树形结构将源文件的内容写入到内存映射文件中的具体步骤包括:
根据当前分配的线程数C创建C个用于记录源文件序列的线程列表Lp; 
遍历树形结构获取每个源文件的标记信息和每个源文件的遍历路径,并将源文件标记信息中每个源文件的字节数作为关键字利用冒泡排序法将源文件排序,并根据排序结果将每个源文件的标记信息和遍历路径作为一个数据结构存储在数据列表Lf中;
根据源文件的总字节数S计算出每个线程需要处理的平均字节数:V= S/C;
根据平均字节数将数据列表Lf中每个源文件的标记信息、遍历路径以及文件拆分标记信息作为一个数据结构逐一循环压入到C个线程列表Lp中;压入时,若某个源文件的字节数大于平均字节数V时,则将所述某个源文件的内容分成C个部分以生成C个文件拆分标记信息,再将所述某个源文件的标记信息和遍历路径对应一个文件拆分标记信息形成C个数据结构按顺序分别压入到C个线程列表Lp中,若源文件的字节数小于平均字节数V时,则源文件不需拆分,且不需要填充其所对应数据结构中的文件拆分标记信息;当某个线程列表Lp中源文件的总字节数大于平均字节数V时,不再对所述某个线程列表Lp进行源文件分配,并进入下一个线程列表Lp中进行判断及分配;
C个线程根据线程列表Lp中的分配结果同步将源文件写入到内存映射文件中。
3.根据权利要求1所述的文件合并方法,其特征在于,写入头文件信息时,把存储树形结构内容所占的字节数写在内存映射文件的开始位置处,其占4个字节,再把树形结构的内容采用孩子兄弟链表表示法从内存映射文件的第5个字节处开始写入。
4.根据权利要求1所述的文件合并方法,其特征在于,所述源文件为文件夹和/或文件;所述源文件标记信息包括文件夹名称、文件名称、文件字节数和文件在目标文件中的偏移量。
5.根据权利要求4所述的文件合并方法,其特征在于,树形结构为多叉树结构,多叉树中根节点和分支节点存储文件夹名称,多叉树中的叶子节点存储文件的名称、文件字节数和文件在目标文件中的偏移量,若所述源文件为若干个文件夹时,多叉树的根节点的文件夹名称设置为空;
所述多叉树的分支节点为度大于0的树节点,多叉树的叶子节点为度等于0的树节点;
所述文件拆分标记信息是把源文件的内容平均分为C个部分后每部分的标记信息,其包括源文件所分块数、每部分的索引值、每部分的字节数、每部分在被拆分源文件中的位置。
6.一种文件分解方法,包括采用权利要求1所述的合并方法合并的目标文件,其特征在于,包括如下步骤:
分解目标文件,根据目标文件创建内存映射文件;
读取内存映射文件的头信息,生成对应的树形结构;
分解获取全部源文件时,根据树形结构中的节点信息,读取内存映射文件中的内存块,然后生成所有源文件;
分解获取目标文件中的单个源文件时,通过遍历算法在树形结构中找到并读取所述单个源文件的标记信息;
根据获取的单个源文件标记信息在内存映射文件中读出所述单个源文件的内容并在硬盘指定位置生成所述单个源文件,或者读出所述单个源文件的内容到内存中直接使用。
7.根据权利要求6所述的文件分解方法,其特征在于,分解获取全部源文件时,根据树形结构中的节点信息,读取内存映射文件中的内存块,然后生成所有源文件的具体步骤包括:
根据当前分配的线程数C创建用于C个记录源文件序列的线程列表Lp
遍历树形结构获取每个源文件的标记信息和每个源文件的遍历路径,并将标记信息中源文件的字节数作为关键字,利用冒泡排序法将源文件排序,并根据排序结果将每个源文件的标记信息和遍历路径作为一个数据结构存储在数据列表Lf中;
根据目标文件的总字节数S计算出每个线程需要处理的平均字节数:V= S/C;
根据平均字节数将数据列表Lf中每个源文件的标记信息、遍历路径以及文件拆分标记信息作为一个数据结构逐一循环压入到C个线程列表Lp中;压入时,若某个源文件的字节数大于平均字节数V时,则将所述某个源文件的内容分成C个部分以生成C个拆分标记信息,再将所述某个源文件的标记信息和遍历路径对应一个文件拆分标记信息形成C个数据结构按顺序分别压入到C个线程列表Lp中,若源文件的字节数小于平均字节数V时,则源文件不需拆分,且不需要填充其所对应数据结构中的文件拆分标记信息;当某个线程列表Lp中源文件的总字节数大于平均字节数V时,不再对所述某个线程列表Lp进行源文件分配,并进入下一个线程列表Lp中进行判断及分配;
C个线程根据线程列表Lp中的分配结果同步生成对应的源文件。
8.根据权利要求7所述的文件分解方法,其特征在于,所述树形结构为多叉树结构,源文件为文件夹和/或文件。
9.根据权利要求8所述的文件分解方法,其特征在于,所述内存映射文件的头信息包括树形结构内容所占的字节数和树形结构的内容,树形结构内容所占的字节数位于内存映射文件的开始位置处,其占4个字节,树形结构位于内存映射文件的开始位置处,其从第5个字节开始;
所述树形结构的内容为目标文件中源文件的标记信息,包括文件夹名称、文件的名称、文件字节数和文件在目标文件中的偏移量;
生成多叉树时,多叉树中根节点和分支节点存储文件夹名称,多叉树中的叶子节点存储文件的名称、文件字节数和文件在目标文件中的偏移量,若所述源文件为若干个文件夹时,多叉树的根节点的文件夹名称设置为空;所述多叉树的分支节点为度大于0的树节点,多叉树的叶子节点为度等于0的树节点。
10.根据权利要求9所述的文件分解方法,其特征在于,
分解获取目标文件中的单个源文件时,通过遍历查找树形结构获取的的单个源文件标记信息是单个源文件的字节数和其在内存映射文件中的偏移量;
所述文件拆分标记信息是把源文件的内容平均分为C个部分后每部分的标记信息,其包括源文件所分块数、每部分的索引值、每部分的字节数、每部分在被拆分源文件中的位置。
CN201110316534.1A 2011-10-18 2011-10-18 一种文件合并方法及分解方法 Active CN102508880B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110316534.1A CN102508880B (zh) 2011-10-18 2011-10-18 一种文件合并方法及分解方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110316534.1A CN102508880B (zh) 2011-10-18 2011-10-18 一种文件合并方法及分解方法

Publications (2)

Publication Number Publication Date
CN102508880A true CN102508880A (zh) 2012-06-20
CN102508880B CN102508880B (zh) 2014-07-02

Family

ID=46220966

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110316534.1A Active CN102508880B (zh) 2011-10-18 2011-10-18 一种文件合并方法及分解方法

Country Status (1)

Country Link
CN (1) CN102508880B (zh)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279474A (zh) * 2013-04-10 2013-09-04 深圳康佳通信科技有限公司 一种视频文件索引方法及系统
WO2015032332A1 (zh) * 2013-09-09 2015-03-12 华为技术有限公司 一种数据处理方法及装置
CN104516988A (zh) * 2015-01-21 2015-04-15 天津书生云科技有限公司 一种文件写入方法和装置
CN104933062A (zh) * 2014-03-19 2015-09-23 中国移动通信集团浙江有限公司 一种文件合并方法及装置
CN105205108A (zh) * 2015-08-27 2015-12-30 北京金山安全软件有限公司 一种文件夹的解散方法及装置
CN105260453A (zh) * 2015-10-12 2016-01-20 中科创达软件股份有限公司 一种应用文件夹的合并方法及系统
CN105700861A (zh) * 2014-11-27 2016-06-22 迈普通信技术股份有限公司 一种嵌入式程序运行符号表的生成方法及装置
CN106570134A (zh) * 2016-10-27 2017-04-19 西安合众思壮导航技术有限公司 一种文件组织方法和装置
CN106709025A (zh) * 2016-12-28 2017-05-24 郑州云海信息技术有限公司 更新聚合对象的方法及装置
CN106776882A (zh) * 2016-11-25 2017-05-31 维沃移动通信有限公司 一种文件管理方法及移动终端
CN106775745A (zh) * 2016-12-28 2017-05-31 广州华多网络科技有限公司 合并程序代码的方法及装置
CN108009243A (zh) * 2017-11-30 2018-05-08 云南电网有限责任公司 一种针对同文档的多用户同步编辑处理系统及处理方法
CN108241654A (zh) * 2016-12-23 2018-07-03 航天星图科技(北京)有限公司 一种分布式系统中的数据读写方法
WO2018205689A1 (zh) * 2017-05-10 2018-11-15 华为技术有限公司 合并文件的方法、存储装置、存储设备和存储介质
CN109558128A (zh) * 2018-10-25 2019-04-02 平安科技(深圳)有限公司 json数据解析方法、装置及计算机可读存储介质
CN110335583A (zh) * 2019-04-15 2019-10-15 浙江工业大学 一种带隔断标识的复合文件生成及解析方法
CN110597767A (zh) * 2019-08-08 2019-12-20 北京盛赞科技有限公司 一种数据分割方法、装置、设备及计算机可读存储介质
CN111262837A (zh) * 2020-01-09 2020-06-09 奇安信科技集团股份有限公司 一种数据加密方法、数据解密方法、系统、设备和介质
WO2022222547A1 (zh) * 2021-04-19 2022-10-27 福建福昕软件开发股份有限公司 一种大批量pdf文件合并的方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1916844A (zh) * 2006-09-08 2007-02-21 华为技术有限公司 数据打包及其解包的方法
CN101420324A (zh) * 2008-10-10 2009-04-29 中兴通讯股份有限公司 一种网管系统及其代理软件的版本更新方法
CN101763436A (zh) * 2010-02-08 2010-06-30 深圳市茁壮网络股份有限公司 一种文件打包方法及工具
CN102073633A (zh) * 2009-11-23 2011-05-25 腾讯科技(深圳)有限公司 资源文件的存储访问方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1916844A (zh) * 2006-09-08 2007-02-21 华为技术有限公司 数据打包及其解包的方法
CN101420324A (zh) * 2008-10-10 2009-04-29 中兴通讯股份有限公司 一种网管系统及其代理软件的版本更新方法
CN102073633A (zh) * 2009-11-23 2011-05-25 腾讯科技(深圳)有限公司 资源文件的存储访问方法及装置
CN101763436A (zh) * 2010-02-08 2010-06-30 深圳市茁壮网络股份有限公司 一种文件打包方法及工具

Cited By (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279474A (zh) * 2013-04-10 2013-09-04 深圳康佳通信科技有限公司 一种视频文件索引方法及系统
WO2015032332A1 (zh) * 2013-09-09 2015-03-12 华为技术有限公司 一种数据处理方法及装置
CN104933062A (zh) * 2014-03-19 2015-09-23 中国移动通信集团浙江有限公司 一种文件合并方法及装置
CN104933062B (zh) * 2014-03-19 2018-09-04 中国移动通信集团浙江有限公司 一种文件合并方法及装置
CN105700861A (zh) * 2014-11-27 2016-06-22 迈普通信技术股份有限公司 一种嵌入式程序运行符号表的生成方法及装置
CN104516988A (zh) * 2015-01-21 2015-04-15 天津书生云科技有限公司 一种文件写入方法和装置
CN104516988B (zh) * 2015-01-21 2018-09-28 天津书生云科技有限公司 一种文件写入方法和装置
CN105205108A (zh) * 2015-08-27 2015-12-30 北京金山安全软件有限公司 一种文件夹的解散方法及装置
WO2017032306A1 (zh) * 2015-08-27 2017-03-02 北京金山安全软件有限公司 一种文件夹的解散方法及装置
CN105260453A (zh) * 2015-10-12 2016-01-20 中科创达软件股份有限公司 一种应用文件夹的合并方法及系统
CN106570134A (zh) * 2016-10-27 2017-04-19 西安合众思壮导航技术有限公司 一种文件组织方法和装置
CN106776882A (zh) * 2016-11-25 2017-05-31 维沃移动通信有限公司 一种文件管理方法及移动终端
CN108241654A (zh) * 2016-12-23 2018-07-03 航天星图科技(北京)有限公司 一种分布式系统中的数据读写方法
CN106709025A (zh) * 2016-12-28 2017-05-24 郑州云海信息技术有限公司 更新聚合对象的方法及装置
CN106775745A (zh) * 2016-12-28 2017-05-31 广州华多网络科技有限公司 合并程序代码的方法及装置
CN106775745B (zh) * 2016-12-28 2020-04-28 广州华多网络科技有限公司 合并程序代码的方法及装置
WO2018205689A1 (zh) * 2017-05-10 2018-11-15 华为技术有限公司 合并文件的方法、存储装置、存储设备和存储介质
CN108009243A (zh) * 2017-11-30 2018-05-08 云南电网有限责任公司 一种针对同文档的多用户同步编辑处理系统及处理方法
CN109558128A (zh) * 2018-10-25 2019-04-02 平安科技(深圳)有限公司 json数据解析方法、装置及计算机可读存储介质
CN110335583A (zh) * 2019-04-15 2019-10-15 浙江工业大学 一种带隔断标识的复合文件生成及解析方法
CN110597767A (zh) * 2019-08-08 2019-12-20 北京盛赞科技有限公司 一种数据分割方法、装置、设备及计算机可读存储介质
CN110597767B (zh) * 2019-08-08 2022-05-10 北京盛赞科技有限公司 一种数据分割方法、装置、设备及计算机可读存储介质
CN111262837A (zh) * 2020-01-09 2020-06-09 奇安信科技集团股份有限公司 一种数据加密方法、数据解密方法、系统、设备和介质
CN111262837B (zh) * 2020-01-09 2023-04-11 奇安信科技集团股份有限公司 一种数据加密方法、数据解密方法、系统、设备和介质
WO2022222547A1 (zh) * 2021-04-19 2022-10-27 福建福昕软件开发股份有限公司 一种大批量pdf文件合并的方法及系统

Also Published As

Publication number Publication date
CN102508880B (zh) 2014-07-02

Similar Documents

Publication Publication Date Title
CN102508880B (zh) 一种文件合并方法及分解方法
Sakr Big data 2.0 processing systems: a survey
EP3005105B1 (en) Deeply parallel source code compilation
CA2997061C (en) Method and system for parallelization of ingestion of large data sets
JP6598996B2 (ja) データ準備のためのシグニチャベースのキャッシュ最適化
Erraissi et al. Data sources and ingestion big data layers: meta-modeling of key concepts and features
Humbetov Data-intensive computing with map-reduce and hadoop
EP2780834A1 (en) Data processing service
EP2960789A2 (en) Unified mapreduce framework for large-scale data processing
CN111611266A (zh) 知识驱动的联合大数据查询和分析平台
CN111611304A (zh) 知识驱动的联合大数据查询和分析平台
CN103440246A (zh) 用于MapReduce的中间结果数据排序方法及系统
CN106547644A (zh) 增量备份方法和设备
WO2014146024A1 (en) Databases and methods of storing, retrieving, and processing data
CA2997071A1 (en) Metadata-driven data management platform
CN111611448A (zh) 知识驱动的联合大数据查询和分析平台
Sozykin et al. MIPr-a framework for distributed image processing using Hadoop
JP2018530838A (ja) データ準備のためのキャッシュ最適化
Boehm et al. Sideloading–Ingestion of large point clouds into the Apache Spark Big data engine
Bansod Efficient big data analysis with apache spark in HDFS
EP2960790A2 (en) Datastore mechanism for managing out-of-memory data
US11042530B2 (en) Data processing with nullable schema information
Perwej et al. An extensive investigate the mapreduce technology
Sarkar et al. MapReduce: A comprehensive study on applications, scope and challenges
CN116414801A (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
C14 Grant of patent or utility model
GR01 Patent grant
CP03 Change of name, title or address

Address after: Kezhu road high tech Industrial Development Zone, Guangzhou city of Guangdong Province, No. 233 510670

Patentee after: VTRON GROUP Co.,Ltd.

Address before: 510663 No. 6, color road, hi tech Industrial Development Zone, Guangdong, Guangzhou, China

Patentee before: VTRON TECHNOLOGIES Ltd.

CP03 Change of name, title or address
TR01 Transfer of patent right

Effective date of registration: 20201130

Address after: 215500 No.13, Caotang Road, Changshu, Suzhou, Jiangsu Province

Patentee after: Changshu intellectual property operation center Co.,Ltd.

Address before: Unit 2414-2416, main building, no.371, Wushan Road, Tianhe District, Guangzhou City, Guangdong Province

Patentee before: GUANGDONG GAOHANG INTELLECTUAL PROPERTY OPERATION Co.,Ltd.

Effective date of registration: 20201130

Address after: Unit 2414-2416, main building, no.371, Wushan Road, Tianhe District, Guangzhou City, Guangdong Province

Patentee after: GUANGDONG GAOHANG INTELLECTUAL PROPERTY OPERATION Co.,Ltd.

Address before: Kezhu road high tech Industrial Development Zone, Guangzhou city of Guangdong Province, No. 233 510670

Patentee before: VTRON GROUP Co.,Ltd.

TR01 Transfer of patent right
CP02 Change in the address of a patent holder

Address after: 215500 5th floor, building 4, 68 Lianfeng Road, Changfu street, Changshu City, Suzhou City, Jiangsu Province

Patentee after: Changshu intellectual property operation center Co.,Ltd.

Address before: No.13 caodang Road, Changshu City, Suzhou City, Jiangsu Province

Patentee before: Changshu intellectual property operation center Co.,Ltd.

CP02 Change in the address of a patent holder