具体实施方式
本发明实施例中,首先收集所有需要打包的文件,其中每个文件都由至少一个文件项来描述,然后将每个文件项所包含的文件信息分成至少两组,并根据各组的组标识将各组中的文件信息写入包文件。
在本发明实施例中,文件项所包含的文件信息包括:类型(文件或文件夹)、名称、路径、操作、文件数据以及与文件数据相关的描述信息、数据长度、数据指向(或数据位置)、数据编码方法序列、校验值等等。上述文件信息对于每个文件项来说并不一定全部出现,而是可以根据需要进行选择、组合。其中,一部分文件信息的含义是:
(1)校验值能够保证文件内容的正确性,从而提高整体的可靠性。
(2)操作指的是将包文件看作一个虚拟的存储设备,在该存储设备上进行的新建、删除、替换、修改、追加、切换当前目录等可能的文件系统操作。一个文件项中只包含上述文件系统操作中的任意一种。
(3)文件数据是原始文件数据经过指定的数据编码方法处理后得到的,如果未指定数据编码方法,则将原始文件数据直接作为所需的文件数据。
对于文件项来说,文件数据有时可以为空。具体来说,当某个文件项中的操作是删除时,并不需要文件数据,这时文件数据为空。
(4)数据编码方法序列是一个或者多个数据编码方法构成的序列。不仅仅包含一般意义上的数据编码方法,本发明实施例还将加解密方法看作为数据编码方法。这是因为加解密方法与数据编码方法一样,都是将数据从一种表示形式变换为另一种表示形式,只不过加解密方法在变换的过程中与密钥等安全信息相关。通过在该序列中添加不同的数据编码方法,然后按照该序列对相应数据进行编码处理,继而达到灵活的扩展压缩和安全处理。
另外,有一些文件信息在开始时不能获得,必须在后续的处理过程中才能计算得到,例如,文件数据在包文件中的位置等。这些文件信息可以在后期处理时得到,并写入到文件项中相应的位置处。
下面结合说明书附图对本发明实施例的具体实施方式进行详细描述。
如图1所示,本发明实施例提供的文件打包方法的基本步骤包括:
步骤110、收集待打包的文件,其中,每个文件由至少一个文件项来描述,每个文件项包含多个用于描述文件内容的文件信息;
步骤120、将每个文件项所包含的文件信息分为至少两组;
步骤130、根据各组的组标识将各组中的文件信息写入包文件。
本发明实施例中,文件项中的一些文件信息可以在开始时获得,也可以在后续处理过程中获得,例如,容量相对较大的文件数据可以在开始时获得,也可以在写入包文件之前的处理过程中获得并写入到相应位置处,以提高灵活性和效率。
下面针对具体应用需要,对上述文件打包方法的四个具体实施例进行详细描述。
实施例一
如图2所示,本发明实施例提供的一种文件打包方法的具体步骤包括:
步骤210、收集所有需要打包的文件,每个文件由至少一个文件项来描述,每个文件项包含多个用于描述文件内容的文件信息,其中,文件信息可以由用户或者外部程序提供。
步骤220、将所有文件项进行排序。其中,进行排序的方式有很多种,例如:
(1)按照文件系统的结构层次前序排列。
(2)按照实际使用时文件项的访问顺序排列。在这种排序方式下,由于包文件内部的文件数据是按照实际使用时的访问顺序存储的,所以当包文件在网络传输时,可以在下载整个包文件的同时,使用包文件中已经下载完毕的文件数据部分,从而达到线性化的效果。
(3)按照收集文件项时的收集顺序排列。
(4)按照文件名称或路径名称排列。
在本发明实施例中,将文件项进行排序的方式并不限于以上四种,只要保证对于每一个文件项在使用路径时,都可以找到相应的路径即可。其中,路径名称可以有多种方式,如:
A、相对路径:通过显式的操作指定当前路径,或者在某些操作里面隐含的指定了当前路径,之后的文件项可以相对当前路径进行操作。
B、绝对路径:文件项中包含所需的绝对路径,直接使用即可。
C、显式指定层次结构:通过各文件项之间的指针、引用、包含等等关系来确定层次结构。
步骤230、将排序后的文件项进行合并。
具体地,所述合并包括将操作具有逻辑关系的文件项进行合并,并将多个文件项中重复的文件信息删减为一份,该多个文件项是指描述同一文件的多个文件项。例如,文件项1所包含的操作为新建文件A,文件项2对文件A的操作为替换,其中,文件项2替换掉了文件项1中新建的文件A的内容,则文件项1和文件项2合并后可得到文件项3,该文件项3所包含的操作是新建文件A,且文件项3中的文件数据是文件项2提供的替换文件项1中文件A数据的替换数据;如果之后还有文件项4对文件A的操作时追加,文件项5对文件A的操作是删除,则文件项3,4和5合并后的结果是0个文件项。可见,通过上述合并处理,能够达到简化操作,减少存储开销的目的。
步骤240、将所有文件项组合为一个或多个集合。
在实际应用中,可能收集到的文件项很多,或者外部程序或用户有分集合存储的需求,这时可以根据实际应用需要进行集合划分,例如根据所需集合大小或体积、所需集合组大小或体积等进行集合划分。例如,假设收集到四个文件项:文件项1、文件项2、文件项3和文件项4,由于外部程序有分集合存储的需求,则根据所需集合大小将这四个文件项分为两个集合:集合1和集合2,其中,集合1包括文件项1和文件项2,集合2包括文件项3和文件项4。
步骤250、将每个文件项所包含的文件信息分为至少两组。
分组的原则与具体的应用相关,例如:可以将一个文件项中的类型、名称、数据指向等文件描述信息作为第一组,将数据长度、数据编码方法序列和文件数据等容量相对较大的数据信息作为第二组。其中,假设第一组的组标识为Entry,第二组的组标识为Bitstream。则上述四个文件项所包含的文件信息分别被分为两组:两组的组标识分别为Entry和Bitstream。
步骤260、在每个集合中将组标识相同的各组中的文件信息组合成一个集合组。
仍以上述四个文件项为例,在集合1中,将文件项1和文件项2中组标识为Entry的第一组中的文件信息组合成集合1中的集合组1,将文件项1和文件项2中组标识为Bitstream的第二组中的文件信息组合成集合1中的集合组2;在集合2中,将文件项3和文件项4中组标识为Entry的第一组中的文件信息组合成集合2中的集合组1,将文件项3和文件项4中组标识为Bitstream的第二组中的文件信息组合成集合2中的集合组2。其中,假设集合组1的集合组标识为Entry Block(Entry块);集合组2的集合组标识为Bitstream Block(Bitstream块)。
步骤270、根据各集合中各集合组的集合组标识将各集合组中的文件信息写入包文件。
此时,可以按照以下顺序将上述集合组中的文件信息写入包文件:集合1中的集合组1、集合1中的集合组2、集合2中的集合组1和集合2中的集合组2。较佳地,在每个集合组的头部写入属于同一集合的其他集合组的位置信息以及该集合组所属的集合相邻的集合中与该集合组具有相同的集合组标识的集合组的位置信息,例如,集合1中的集合组1的头部写入集合1中的集合组2的位置信息以及集合组2中的集合组1的位置信息。此时,如果集合组1中包括的文件信息为容量相对较小的文件描述信息,集合组2中包括的文件信息为容量相对较大的文件数据信息,并且在将集合组1和集合组2写入包文件时,先写入集合组1,再写入集合组2,则在例如网络应用时,用户可以首先获取到集合组1中所有文件项的文件描述信息,即可在没有下载容量较大的文件数据信息之前,就获知该集合中具体包括哪些文件数据,从而决定是否下载这些文件数据或下载其中的哪些文件数据,这样就很大程度上方便了用户。
上述步骤220中对文件项进行排序是为步骤230中将文件项进行合并、查找、步骤250中将文件信息分为至少两组提供便利,而在步骤270之前,还可以包括对集合组中的文件信息进行排序的步骤,此时,可以根据各集合组的存储需要进行排序,可以包括以下两种排序方法:(1)统一排序,即对同一集合中集合组标识不同的集合组中的文件信息按照相同的排序方法进行排序,例如,对集合1中的集合组1和集合组2都按照文件系统的结构层次前序排列;(2)分别排序,即对同一集合中集合组标识不同的集合组中的文件信息按照不同的排序方法进行排序,但是同一文件项内的各组之间存在对应关系,例如,对集合组2中的集合组1按照文件系统的结构层次前序排列,而对集合组2中的集合组2按照实际使用时文件项的访问顺序进行排序,而同一文件项内的第一组和第二组之间存在一定的对应关系,例如可以通过第一组中记录的数据指向来定位所对应的其他文件信息在第二组中的位置。
另外,由于文件信息中可以包括数据编码方法序列,所以步骤270之前还可以包括根据数据编码方法序列对文件信息中包含的数据进行数据编码处理的步骤。其中,数据编码方法序列可以根据实际应用的需要随时添加或删除指定的数据编码方法。
上述实施例一中,各步骤的执行顺序只是具体实施中的一种方式,在实际应用中,可以根据具体应用需要对上述各步骤的执行顺序以及是否执行某步骤进行调整,例如,在不需要对文件项进行合并时,不执行步骤230,并且先执行步骤250,再执行步骤220;或者先执行步骤240,再执行步骤220,等等。本发明对各步骤的执行顺序并不做限定。
实施例二
在实际应用中,还有可能对包文件中某些文件项中的文件信息进行修改,如图3所示,本发明实施例提供的一种包文件修改方法包括以下步骤:
步骤310、收集包含修改文件内容的文件项,并取出包文件内的所有文件项。
步骤320、将从包文件中取出的文件项与收集到的包含修改文件内容的文件项进行合并。
具体合并方法与实施例一中的合并方法相同,此处不再赘述。
步骤330、将合并后的文件项写入包文件。
具体地,将合并后的文件项写入包文件的方法与实施例一中的写入方法相同,此处不再赘述。
上述实施例二描述的修改方法属于洁净存储,即不保留原来的文件项内容,而将修改后的文件项重新进行打包。
实施例三
如图4所示,本发明实施例提供的另一种包文件修改方法包括以下步骤:
步骤410、收集包含修改文件内容的文件项,并取出包文件内的所有文件项。
步骤420、将收集到的包含修改文件内容的文件项与对应修改的从包文件中取出的文件项组合成一个文件项。
例如,收集到的包含修改文件内容的文件项1为修改包文件中取出的文件项2中的文件数据,则将文件项1和文件项2组合成一个文件项。
步骤430、将组合后的文件项中包含的文件信息分为至少两组,并将包含文件数据的组中包含的文件信息按照使用时的顺序进行排序。
步骤440、将排序后得到的各组中的文件信息写入包文件。
较佳地,包含文件数据的组中的文件信息最后写入。具体的写入方法与实施例一中的写入方法相同,此处不再赘述。
上述实施例三描述的修改方法属于线性化存储,即将同一文件的数据信息按照使用的顺序进行存储,并将经过排序后的文件项重新进行打包。
实施例四
如图5所示,本发明实施例提供的另一种包文件修改方法包括以下步骤:
步骤510、收集包含修改文件内容的文件项。
步骤520、将收集到的包含修改文件内容的文件项写到包文件尾部。
具体地,将收集到的包含修改文件内容的文件项写入包文件的方法与实施例一中的写入方法相同,此处不再赘述。
如果需要对包文件进行多次修改,则可将每次修改时包含修改文件内容的文件项视为一个修改单元添加到包文件的尾部,根据修改的次数,包文件被分为多个单元,初始包文件为第一单元,第一次修改添加的内容为第二单元,第二次修改添加的内容为第三单元,以此类推,即对包文件进行的所有操作都可以通过在包文件尾部添加文件项的方式实现,从而记录了包文件的历史信息。
上述实施例四描述的修改方法属于增量存储,即将包含修改文件内容的文件项直接写到包文件尾部,而不需要从包文件中取出其中的文件项。
下面举例说明本发明实施例所采用的一种包文件的结构,如图6所示,为本发明实施例中一种包文件结构的示意图。本发明实施例中,包文件由文件头(Header),文件描述信息块(Entry块)和文件数据信息块(文件流,Bitstream块)组成。其中,Entry块和Bitstream块在一个包文件中可以出现多个。对包文件中的各元素的说明如表1所示。
表1
其中,文件头的结构示意图如图7所示,其中各元素的具体说明如表2所示。
表2
Entry块的结构示意图如图8所示,其中各文件信息的具体说明如表3所示。
表3
表4
Bitstream块的结构示意图如图9所示,其中各文件信息的具体说明如表5所示。
表5
上述包文件允许用户做增量修改,也就是说,修改的内容会写入到包文件的尾部,这样可以最大限度的减小文件需要移动的数据量。具体的操作分两部分:首先在原来的包文件尾部增加新的Entry块和BitStream块,然后将原来最后一个Entry块的Next指针指向该新增加的Entry块的起始位置,如图10所示。
在网络应用中,要求有良好的数据传输性能,这种包文件可以对内部的数据块做线性化处理,以达到适应流式传输的需要。具体的做法是:将所有的Entry块组合在一起放在包文件的开始部分,将所有的BitStream块按使用顺序组织在一起,然后修改ItemOffset,从而指向正确的位置。
更进一步,在Entry块内部,可以按页的顺序把每页所需的文件项按顺序排列,以达到更好的线性化效果,如图11所示。
相应的,本发明实施例还提供一种文件打包的装置,如图12所示,该装置至少包括:
收集模块1201,用于收集待打包的文件,其中每个文件由至少一个文件项来描述,每个文件项包含多个用于描述文件内容的文件信息;
分组模块1202,用于将每个文件项所包含的文件信息分为至少两组;
写模块1203,用于根据各组的组标识将各组中的文件信息写入包文件。
上述文件打包装置还可以包括:第一集合组模块,用于将所有文件项组合为一个集合;并在该集合中将组标识相同的各组中的文件信息组合成一个集合组;
则写模块1203进一步用于根据各集合组的集合组标识将各集合组中的文件信息写入包文件。
上述文件打包装置还可以包括:第二集合组模块,用于将所有文件项分为多个集合;并在每个集合中将组标识相同的各组中的文件信息组合成一个集合组;
则写模块1203进一步用于根据集合中各集合组的集合组标识将各集合组中的文件信息写入包文件。
上述文件打包装置还可以包括:排序模块,用于将所有文件项进行排序;
其中,进行排序的方式包括下述方式中的至少一种:
按照文件系统的结构层次前序排列;
按照实际使用时文件项的访问顺序排列;
按照文件名称或路径名称排列;
按照收集文件项时的收集顺序排列。
上述文件打包装置还可以包括:编码模块,用于根据文件信息中包含的表示多个数据编码方法排列顺序的数据编码方法序列对文件信息中的数据进行数据编码处理。
上述文件打包装置还可以包括:合并模块,用于将文件项进行合并。
上述文件打包装置还可以包括:第一修订模块,用于收集包含修改文件内容的文件项,并取出包文件内的所有文件项;以及将从包文件中取出的文件项与收集到的包含修改文件内容的文件项进行合并;
则写模块1203进一步用于将合并后的文件项写入包文件。
由于文件信息中包含操作,该操作是将包文件作为一个虚拟的存储设备,在该存储设备上进行的文件系统操作,并且每个文件项的文件信息中只包含一个操作;则上述文件打包装置还可以包括:合并模块,用于将操作具有逻辑关系的文件项进行合并,并将多个文件项中重复的文件信息删减为一份,所述多个文件项是描述同一文件的多个文件项。
上述文件打包装置还可以包括:第二修订模块,用于收集包含修改文件内容的文件项,并取出所述包文件内的所有文件项;将收集到的包含修改文件内容的文件项与对应修改的从所述包文件中取出的文件项组合成一个文件项;以及将组合后的文件项中包含的文件信息分为至少两组,并将所有文件项中包含文件数据的组中包含的文件信息按照使用时的顺序进行排序;
则写模块1203进一步用于将排序后得到的各组中的文件信息写入包文件。
上述文件打包装置还可以包括:第三修订模块,用于收集包含修改文件内容的文件项;
则写模块1203进一步用于将收集到的包含修改文件内容的文件项写到所述包文件尾部。
相应的,本发明实施例还提供一种文件提取的方法,用于从利用上述文件打包方法获得的包文件中提取文件,如图13所示,包括以下步骤:
步骤1310、提取包文件中包含指定的唯一性标识的组中的文件信息;
步骤1320、根据提取到的文件信息确定所需文件数据所在的组的位置信息;
步骤1330、根据该位置信息提取所需文件数据所在的组中的文件信息。
其中,所述包文件中包含至少一个文件,其中,每个文件由至少一个文件项来描述,每个文件项包含多个用于描述文件内容的文件信息,且每个文件项所包含的文件信息被分为至少两组。
步骤1310中,提取包文件中包含指定的唯一性标识的组中的文件信息,包括:
根据用户输入的提取信息确定对应的唯一性标识;
根据确定出的唯一性标识提取对应组中的文件信息。
其中,所述唯一性标识为文件名称或路径名称。
特别的,如果所有文件项中的唯一性标识的字节数相等,在对文件项进行排序后,可以使用多叉查找算法直接在组内进行搜索。
下面以上述包文件结构为例,详细说明上述文件提取方法的具体实施方式。其中,文件提取有以下两种情况:
一、一般性文件提取
1、打开包文件,读取文件头,并进行校验等操作;
2、依次读取Entry,并对每个Entry进行如下操作:
(1)确定该Entry中是否包含用户指定的唯一性标识;
(2)若该Entry中包含该唯一性标识,则根据该Entry中的文件信息,如对应的Bitstream的偏移,确定该对应Bitstream的位置信息,并根据该位置信息提取该Bitstream中的文件信息;若该Entry中不包含该唯一性标识,则跳转到下一个Entry。
3、将提取到的Entry和Bitstream中的文件信息合并后返回给用户。
二、线性化读取
1、打开包文件,读取文件头,并进行校验等操作;
2、依次读取Entry,并对每个Entry进行如下操作:
(1)确定该Entry中是否包含用户指定的唯一性标识;
(2)若该Entry中包含该唯一性标识,则根据该Entry中的文件信息,如对应的Bitstream的偏移,确定该对应Bitstream的位置信息,并根据该位置信息提取该Bitstream中的文件信息;若该Entry中不包含该唯一性标识,则跳转到下一个Entry。
3、确定Bitstream中的文件信息是否提取完成,在提取完成后,将提取到的Entry和Bitstream中的文件信息合并后返回给用户。
相应的,本发明实施例还提供一种文件提取的装置,其结构如图14所示,包括:
第一提取模块1410,用于提取包文件中包含指定的唯一性标识的组中的文件信息;
确定模块1420,用于根据所述提取到的文件信息确定所需文件数据所在的组的位置信息;
第二提取模块1430,用于根据所述位置信息提取所述文件数据所在的组中的文件信息。
在本发明实施例中,对包文件中的内容进行修改时,可以不将整个包文件进行重写,而是将包含修改文件内容的文件项以增量修改的形式写入包文件尾部即可。
另外,还可以达到保存包内文件的历史版本的目的。例如,在文件A被加入包文件之后,又对文件A进行修改,则可以将修改后的文件A再次加入包文件,则包文件中包含文件A修改前后的文件内容。
而且,在本发明实施例中,可以将包内文件的存储顺序按照用户使用时的顺序进行排列,从而使得包文件在网络上进行线性传输时,可以按照用户使用的顺序获取文件,从而达到线性化的效果。
同时,本发明实施例还能够通过提供的提取文件的方法,利用上述文件打包方法得到的包文件,快速、灵活的提取到用户所需的文件。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。