專利名稱::一種文件打包、提取的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種文件打包、提取的方法和裝置。
背景技術(shù):
:文件打包,指的是將存儲設(shè)備中保存的多個文件合成一個文件,合成后的文件稱為包文件,用戶還可以從包文件中提取出所需的文件。在日常生活中,計算機中存在大量的文件。為了合理布局和便于查找,人們通常將這些文件進行分類、存檔。在分類、存檔時,往往需要將多個文件進行打包。一般,用戶會選擇WinZip等工具來對這些文件進行打包存儲,這類工具的打包具體步驟包括首先將需要打包的各個文件進行壓縮,然后將壓縮后的各個文件寫入到一個包文件內(nèi),并將與各個文件相應(yīng)的信息集中存放在一起。使用WinZip打包確實可以解決多文件的存檔問題,并且可以對被打包的文件進行數(shù)據(jù)壓縮,從而節(jié)省了存儲空間。但是由于WinZip本身的文件結(jié)構(gòu),即這類工具是將所有的文件數(shù)據(jù)集中存放,所以會導(dǎo)致這種打包方式存在一定的缺點和限制,例如(1)需要獲取全部數(shù)據(jù)后才能進行操作。(2)不適應(yīng)網(wǎng)絡(luò)應(yīng)用。(3)不能保存同一文件的多個歷史版本等。因此,現(xiàn)有打包工具無論是在文件打包時,還是在文件提取時都不夠靈活且功能不夠全面。
發(fā)明內(nèi)容本發(fā)明實施例提供一種文件打包、提取的方法和裝置,用以解決現(xiàn)有打包工具不夠靈活且功能不夠全面的問題,例如,現(xiàn)有打包工具需要獲取全部數(shù)據(jù)后才能進行操作;現(xiàn)有打包工具不適應(yīng)網(wǎng)絡(luò)應(yīng)用;現(xiàn)有打包工具不能保存同一文件的多個歷史版本等問題。本發(fā)明實施例提供一種文件打包的方法,包括收集待打包的文件,其中,每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息;將每個文件項所包含的文件信息分為至少兩組;根據(jù)各組的組標識將各組中的文件信息寫入包文件。本發(fā)明實施例還提供一種用于實現(xiàn)多種功能的包文件,所述包文件包括文件頭,描述包括版權(quán)版本信息和歷史版本數(shù)量的基本信息;文件描述信息塊,文件流入口描述,包括包文件內(nèi)文件流的位置;文件數(shù)據(jù)信息塊,多個文件流的順序組合,包括數(shù)據(jù)編碼方式的信息描述。本發(fā)明實施例提供一種文件打包的裝置,包括收集模塊,用于收集待打包的文件,其中每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息;分組模塊,用于將每個文件項所包含的文件信息分為至少兩組;寫模塊,用于根據(jù)各組的組標識將各組中的文件信息寫入包文件。本發(fā)明實施例提供一種文件提取的方法,包括提取包文件中包含指定的唯一性標識的組中的文件信息;根據(jù)所述提取到的文件信息確定所需文件數(shù)據(jù)所在的組的位置信息;根據(jù)所述位置信息提取所述文件數(shù)據(jù)所在的組中的文件信息。本發(fā)明實施例提供一種文件提取的裝置,包括第一提取模塊,用于提取包文件中包含指定的唯一性標識的組中的文件信自,&,確定模塊,用于根據(jù)所述提取到的文件信息確定所需文件數(shù)據(jù)所在的組的位置信息;第二提取模塊,用于根據(jù)所述位置信息提取所述文件據(jù)所在的組中的文件信息。在本發(fā)明實施例中所有需要打包的文件都由至少一個獨立的文件項來描述,并且還將每個文件項所包含的文件信息進行分組,使得文件打包和提取時更加的靈活,而且功能更加全面,例如,通過本發(fā)明實施例提供的文件打包方法,由于每個文件都有至少一個文件項來描述,即將一個文件分為多個文件項,并且將每個文件項中包含的文件信息進行分組,從而可以根據(jù)需要獲取其中的部分數(shù)據(jù),即可進4亍#:作;同樣,在網(wǎng)絡(luò)應(yīng)用中,也可以在上述文件打包方法的基礎(chǔ)上,按照網(wǎng)絡(luò)傳輸順序?qū)ξ募椷M行打包,從而達到線性化的效果;此外,基于上述文件打包方法,可以在包文件尾部新增文件項,從而可以保存同一文件的多個歷史版本。圖1為本發(fā)明實施例中文件打包的方法的原理流程圖2為本發(fā)明實施例中一種文件打包方法的具體流程圖3為本發(fā)明實施例中一種包文件修改方法的具體流程圖4為本發(fā)明實施例中另一種包文件修改方法的具體流程圖5為本發(fā)明實施例中又一種包文件修改方法的具體流程圖6為本發(fā)明實施例中一種包文件結(jié)構(gòu)的示意圖7為本發(fā)明實施例中一種包文件結(jié)構(gòu)中文件頭的結(jié)構(gòu)示意圖8為本發(fā)明實施例中一種包文件結(jié)構(gòu)中Entry塊的結(jié)構(gòu)示意圖9為本發(fā)明實施例中一種包文件結(jié)構(gòu)中Bitstream塊的結(jié)構(gòu)示意圖IO為本發(fā)明實施例中對包文件做增量修改的示意圖11為本發(fā)明實施例中包文件線性化結(jié)構(gòu)的示意圖12為本發(fā)明實施例中一種文件打包裝置的結(jié)構(gòu)圖13為本發(fā)明實施例中一種文件提取方法的原理流程圖14為本發(fā)明實施例中一種文件提取裝置的結(jié)構(gòu)圖。具體實施例方式本發(fā)明實施例中,首先收集所有需要打包的文件,其中每個文件都由至少一個文件項來描述,然后將每個文件項所包含的文件信息分成至少兩組,并根據(jù)各組的組標識將各組中的文件信息寫入包文件。在本發(fā)明實施例中,文件項所包含的文件信息包括類型(文件或文件夾)、名稱、路徑、操作、文件數(shù)據(jù)以及與文件數(shù)據(jù)相關(guān)的描述信息、數(shù)據(jù)長度、數(shù)據(jù)指向(或數(shù)據(jù)位置)、數(shù)據(jù)編碼方法序列、校驗值等等。上述文件信息對于每個文件項來說并不一定全部出現(xiàn),而是可以根據(jù)需要進行選擇、組合。其中,一部分文件信息的含義是(1)校驗值能夠保證文件內(nèi)容的正確性,從而提高整體的可靠性。(2)操作指的是將包文件看作一個虛擬的存儲設(shè)備,在該存儲設(shè)備上進行的新建、刪除、替換、修改、追加、切換當前目錄等可能的文件系統(tǒng)操作。一個文件項中只包含上述文件系統(tǒng)操作中的任意一種。(3)文件數(shù)據(jù)是原始文件數(shù)據(jù)經(jīng)過指定的數(shù)據(jù)編碼方法處理后得到的,如果未指定數(shù)據(jù)編碼方法,則將原始文件數(shù)據(jù)直^^作為所需的文件數(shù)據(jù)。對于文件項來說,文件數(shù)據(jù)有時可以為空。具體來說,當某個文件項中的操作是刪除時,并不需要文件數(shù)據(jù),這時文件數(shù)據(jù)為空。(4)數(shù)據(jù)編碼方法序列是一個或者多個數(shù)據(jù)編碼方法構(gòu)成的序列。不僅僅包含一般意義上的數(shù)據(jù)編碼方法,本發(fā)明實施例還將加解密方法看作為數(shù)據(jù)編碼方法。這是因為加解密方法與數(shù)據(jù)編碼方法一樣,都是將數(shù)據(jù)從一種表示形式變換為另一種表示形式,只不過加解密方法在變換的過程中與密鑰等安全信息相關(guān)。通過在該序列中添加不同的數(shù)據(jù)編碼方法,然后按照該序列對相應(yīng)數(shù)據(jù)進行編碼處理,繼而達到靈活的擴展壓縮和安全處理。另外,有一些文件信息在開始時不能獲得,必須在后續(xù)的處理過程中才能計算得到,例如,文件數(shù)據(jù)在包文件中的位置等。這些文件信息可以在后期處理時得到,并寫入到文件項中相應(yīng)的位置處。下面結(jié)合說明書附圖對本發(fā)明實施例的具體實施方式進行詳細描述。如圖l所示,本發(fā)明實施例提供的文件打包方法的基本步驟包括步驟IIO、收集待打包的文件,其中,每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息;步驟120、將每個文件項所包含的文件信息分為至少兩組;步驟130、根據(jù)各組的組標識將各組中的文件信息寫入包文件。本發(fā)明實施例中,文件項中的一些文件信息可以在開始時獲得,也可以在后續(xù)處理過程中獲得,例如,容量相對較大的文件數(shù)據(jù)可以在開始時獲得,也可以在寫入包文件之前的處理過程中獲得并寫入到相應(yīng)位置處,以提高靈活性和效率。下面針對具體應(yīng)用需要,對上述文件打包方法的四個具體實施例進行詳細描述。實施例一如圖2所示,本發(fā)明實施例提供的一種文件打包方法的具體步驟包括步驟210、收集所有需要打包的文件,每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息,其中,文件信息可以由用戶或者外部程序提供。步驟220、將所有文件項進行排序。其中,進行排序的方式有很多種,例如(1)按照文件系統(tǒng)的結(jié)構(gòu)層次前序排列。(2)按照實際使用時文件項的訪問順序排列。在這種排序方式下,由于包文件內(nèi)部的文件數(shù)據(jù)是按照實際使用時的訪問順序存儲的,所以當包文件在網(wǎng)絡(luò)傳輸時,可以在下載整個包文件的同時,使用包文件中已經(jīng)下載完畢的文件數(shù)據(jù)部分,從而達到線性化的效果。3)按照收集文件項時的收集順序排列。(4)按照文件名稱或路徑名稱排列。在本發(fā)明實施例中,將文件項進行排序的方式并不限于以上四種,只要保證對于每一個文件項在使用路徑時,都可以找到相應(yīng)的路徑即可。其中,路徑名稱可以有多種方式,如A、相對路徑通過顯式的操作指定當前路徑,或者在某些操作里面隱含的指定了當前路徑,之后的文件項可以相對當前路徑進行操作。B、絕對路徑文件項中包含所需的絕對路徑,直接使用即可。C、顯式指定層次結(jié)構(gòu)通過各文件項之間的指針、引用、包含等等關(guān)系來確定層次結(jié)構(gòu)。步驟230、將排序后的文件項進行合并。具體地,所述合并包括將操作具有邏輯關(guān)系的文件項進行合并,并將多個文件項中重復(fù)的文件信息刪減為一份,該多個文件項是指描述同一文件的多個文件項。例如,文件項1所包含的操作為新建文件A,文件項2對文件A的操作為替換,其中,文件項2替換掉了文件項1中新建的文件A的內(nèi)容,則文件項1和文件項2合并后可得到文件項3,該文件項3所包含的操作是新建文件A,且文件項3中的文件數(shù)據(jù)是文件項2提供的替換文件項1中文件A數(shù)據(jù)的替換數(shù)據(jù);如果之后還有文件項4對文件A的操作時追加,文件項5對文件A的操作是刪除,則文件項3,4和5合并后的結(jié)果是0個文件項??梢姡ㄟ^上述合并處理,能夠達到簡化操作,減少存儲開銷的目的。步驟240、將所有文件項組合為一個或多個集合。在實際應(yīng)用中,可能收集到的文件項很多,或者外部程序或用戶有分集合存儲的需求,這時可以根據(jù)實際應(yīng)用需要進行集合劃分,例如根據(jù)所需集合大小或體積、所需集合組大小或體積等進行集合劃分。例如,假設(shè)收集到四個文件項文件項1、文件項2、文件項3和文件項4,由于外部程序有分集合存儲的需求,則根據(jù)所需集合大小將這四個文件項分為兩個集合集合1和集合2,其中,集合1包括文件項1和文件項2,集合2包括文件項3和文件項4。步驟250、將每個文件項所包含的文件信息分為至少兩組。分組的原則與具體的應(yīng)用相關(guān),例如可以將一個文件項中的類型、名稱、數(shù)據(jù)指向等文件描述信息作為第一組,將數(shù)據(jù)長度、數(shù)據(jù)編碼方法序列和文件數(shù)據(jù)等容量相對較大的數(shù)據(jù)信息作為第二組。其中,假設(shè)第一組的組標識為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。其中,假設(shè)集合組1的集合組標識為EntryBlock(Entry塊);集合組2的集合組標識為BitstreamBlock(Bitstream塊)。步驟270、根據(jù)各集合中各集合組的集合組標識將各集合組中的文件信息寫入包文件。此時,可以按照以下順序?qū)⑸鲜黾辖M中的文件信息寫入包文件集合l中的集合組l、集合1中的集合組2、集合2中的集合組1和集合2中的集合組2。較佳地,在每個集合組的頭部寫入屬于同一集合的其他集合組的位置信息以及該集合組所屬的集合相鄰的集合中與該集合組具有相同的集合組標識的集合組的位置信息,例如,集合1中的集合組1的頭部寫入集合1中的集合組2的位置信息以及集合組2中的集合組1的位置信息。此時,如果集合組l中包括的文件信息為容量相對較小的文件描述信息,集合組2中包括的文件信息為容量相對較大的文件數(shù)據(jù)信息,并且在將集合組1和集合組2寫入包文件時,先寫入集合組l,再寫入集合組2,則在例如網(wǎng)絡(luò)應(yīng)用時,用戶可以首先獲取到集合組1中所有文件項的文件描述信息,即可在沒有下栽容量較大的文件數(shù)據(jù)信息之前,就獲知該集合中具體包括哪些文件數(shù)據(jù),從而決定是否下載這些文件數(shù)據(jù)或下載其中的哪些文件數(shù)據(jù),這樣就很大程度上方便了用戶。上述步驟220中對文件項進行排序是為步驟230中將文件項進行合并、查找、步驟250中將文件信息分為至少兩組提供便利,而在步驟270之前,還可以包括對集合組中的文件信息進行排序的步驟,此時,可以根據(jù)各集合組的存儲需要進行排序,可以包括以下兩種排序方法(l)統(tǒng)一排序,即對同一集合中集合組標識不同的集合組中的文件信息按照相同的排序方法進行排序,例如,對集合1中的集合組1和集合組2都按照文件系統(tǒng)的結(jié)構(gòu)層次前序排列;(2)分別排序,即對同一集合中集合組標識不同的集合組中的文件信息按照不同的排序方法進行排序,但是同一文件項內(nèi)的各組之間存在對應(yīng)關(guān)系,例如,對集合組2中的集合組l按照文件系統(tǒng)的結(jié)構(gòu)層次前序排列,而對集合組2中的集合組2按照實際使用時文件項的訪問順序進行排序,而同一文件項內(nèi)的第一組和第二組之間存在一定的對應(yīng)關(guān)系,例如可以通過第一組中記錄的數(shù)據(jù)指向來定位所對應(yīng)的其他文件信息在第二組中的位置。另外,由于文件信息中可以包括數(shù)據(jù)編碼方法序列,所以步驟270之前還可以包括根據(jù)數(shù)據(jù)編碼方法序列對文件信息中包含的數(shù)據(jù)進行數(shù)據(jù)編碼處理的步驟。其中,數(shù)據(jù)編碼方法序列可以根據(jù)實際應(yīng)用的需要隨時添加或刪除指定的數(shù)據(jù)編碼方法。上述實施例一中,各步驟的執(zhí)行順序只是具體實施中的一種方式,在實際應(yīng)用中,可以根據(jù)具體應(yīng)用需要對上述各步驟的執(zhí)行順序以及是否執(zhí)行某步驟進行調(diào)整,例如,在不需要對文件項進行合并時,不執(zhí)行步驟230,并且先執(zhí)行步驟250,再執(zhí)行步驟220;或者先執(zhí)行步驟240,再執(zhí)行步驟220,等等。本發(fā)明對各步驟的執(zhí)行順序并不做限定。實施例二在實際應(yīng)用中,還有可能對包文件中某些文件項中的文件信息進行修改,如圖3所示,本發(fā)明實施例提供的一種包文件修改方法包括以下步驟步驟310、收集包含#~改文件內(nèi)容的文件項,并取出包文件內(nèi)的所有文件項。步驟320、將從包文件中取出的文件項與收集到的包含修改文件內(nèi)容的文件項進行合并。具體合并方法與實施例一中的合并方法相同,此處不再贅述。步驟330、將合并后的文件項寫入包文件。具體地,將合并后的文件項寫入包文件的方法與實施例一中的寫入方法相同,此處不再贅述。上述實施例二描述的修改方法屬于潔凈存儲,即不保留原來的文件項內(nèi)容,而將修改后的文件項重新進行打包。實施例三如圖4所示,本發(fā)明實施例提供的另一種包文件修改方法包括以下步驟步驟410、收集包含修改文件內(nèi)容的文件項,并取出包文件內(nèi)的所有文件項。步驟420、將收集到的包含修改文件內(nèi)容的文件項與對應(yīng)修改的從包文件中取出的文件項組合成一個文件項。例如,收集到的包含fl"改文件內(nèi)容的文件項1為fl"改包文件中取出的文件項2中的文件it據(jù),則將文件項1和文件項2組合成一個文件項。步驟430、將組合后的文件項中包含的文件信息分為至少兩組,并將包含文件數(shù)據(jù)的組中包含的文件信息按照使用時的順序進行排序。步驟440、將排序后得到的各組中的文件信息寫入包文件。較佳地,包含文件數(shù)據(jù)的組中的文件信息最后寫入。具體的寫入方法與實施例一中的寫入方法相同,此處不再贅述。上述實施例三描述的修改方法屬于線性化存儲,即將同一文件的數(shù)據(jù)信息按照使用的順序進行存儲,并將經(jīng)過排序后的文件項重新進行打包。實施例四如圖5所示,本發(fā)明實施例提供的另一種包文件修改方法包括以下步驟步驟510、收集包含修改文件內(nèi)容的文件項。步驟520、將收集到的包含修改文件內(nèi)容的文件項寫到包文件尾部。具體地,將收集到的包含修改文件內(nèi)容的文件項寫入包文件的方法與實施例一中的寫入方法相同,此處不再贅述。如果需要對包文件進行多次修改,則可將每次修改時包含修改文件內(nèi)容的文件項視為一個修改單元添加到包文件的尾部,根據(jù)修改的次數(shù),包文件被分為多個單元,初始包文件為第一單元,第一次修改添加的內(nèi)容為第二單元,第二次修改添加的內(nèi)容為第三單元,以此類推,即對包文件進行的所有操作都可以通過在包文件尾部添加文件項的方式實現(xiàn),從而記錄了包文件的歷史信息。上述實施例四描述的修改方法屬于增量存儲,即將包含修改文件內(nèi)容的文件項直接寫到包文件尾部,而不需要從包文件中取出其中的文件項。下面舉例說明本發(fā)明實施例所采用的一種包文件的結(jié)構(gòu),如圖6所示,為本發(fā)明實施例中一種包文件結(jié)構(gòu)的示意圖。本發(fā)明實施例中,包文件由文件頭(Header),文件描述信息塊(Entry塊)和文件數(shù)據(jù)信息塊(文件流,Bitstream塊)組成。其中,Entry塊和Bitstream塊在一個包文件中可以出現(xiàn)多個。對包文件中的各元素的說明如表1所示。<table>tableseeoriginaldocumentpage19</column></row><table><table>tableseeoriginaldocumentpage20</column></row><table>表4<table>tableseeoriginaldocumentpage20</column></row><table>Bitstream塊的結(jié)構(gòu)示意圖如圖9所示,其中各文件信息的具體說明如表5所示。表5<table>tableseeoriginaldocumentpage21</column></row><table>上述包文件允許用戶做增量修改,也就是說,修改的內(nèi)容會寫入到包文件的尾部,這樣可以最大限度的減小文件需要移動的數(shù)據(jù)量。具體的操作分兩部分首先在原來的包文件尾部增加新的Entry塊和BitStream塊,然后將原來最后一個Entry塊的Next指針指向該新增加的Entry塊的起始位置,如圖IO所示。在網(wǎng)絡(luò)應(yīng)用中,要求有良好的數(shù)據(jù)傳輸性能,這種包文件可以對內(nèi)部的數(shù)據(jù)塊做線性化處理,以達到適應(yīng)流式傳輸?shù)男枰?。具體的做法是將所有的Entry塊組合在一起放在包文件的開始部分,將所有的BitStream塊按使用順序組織在一起,然后修改ItemOffset,從而指向正確的位置。更進一步,在Entry塊內(nèi)部,可以按頁的順序把每頁所需的文件項按順序排列,以達到更好的線性化效果,如圖11所示。相應(yīng)的,本發(fā)明實施例還提供一種文件打包的裝置,如圖12所示,該裝置至少包括收集模塊1201,用于收集待打包的文件,其中每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息;分組模塊1202,用于將每個文件項所包含的文件信息分為至少兩組;寫模塊1203,用于根據(jù)各組的組標識將各組中的文件信息寫入包文件。上述文件打包裝置還可以包括第一集合組模塊,用于將所有文件項組合為一個集合;并在該集合中將組標識相同的各組中的文件信息紐合成一個集合組;則寫模塊1203進一步用于根據(jù)各集合組的集合組標識將各集合組中的文件信息寫入包文件。上述文件打包裝置還可以包括第二集合組模塊,用于將所有文件項分為多個集合;并在每個集合中將組標識相同的各組中的文件信息組合成一個集合組;則寫模塊1203進一步用于根據(jù)集合中各集合組的集合組標識將各集合組中的文件信息寫入包文件。上述文件打包裝置還可以包括排序模塊,用于將所有文件項進行排序;其中,進行排序的方式包括下述方式中的至少一種按照文件系統(tǒng)的結(jié)構(gòu)層次前序排列;按照實際使用時文件項的訪問順序排列;按照文件名稱或路徑名稱排列;按照收集文件項時的收集順序排列。上述文件打包裝置還可以包括編碼模塊,用于根據(jù)文件信息中包含的表示多個數(shù)據(jù)編碼方法排列順序的數(shù)據(jù)編碼方法序列對文件信息中的數(shù)據(jù)進行數(shù)據(jù)編碼處理。上述文件打包裝置還可以包括合并模塊,用于將文件項進行合并。上述文件打包裝置還可以包括第一修訂才莫塊,用于收集包含修改文件內(nèi)容的文件項,并取出包文件內(nèi)的所有文件項;以及將從包文件中取出的文件項與收集到的包含^奮改文件內(nèi)容的文件項進行合并;則寫模塊1203進一步用于將合并后的文件項寫入包文件。由于文件信息中包含操作,該操作是將包文件作為一個虛擬的存儲設(shè)備,在該存儲設(shè)備上進行的文件系統(tǒng)操作,并且每個文件項的文件信息中只包含一個操作;則上述文件打包裝置還可以包括合并模塊,用于將操作具有邏輯關(guān)系的文件項進行合并,并將多個文件項中重復(fù)的文件信息刪減為一份,所述多個文件項是描述同一文件的多個文件項。上述文件打包裝置還可以包括第二纟務(wù)訂;漢塊,用于收集包含^^改文件內(nèi)容的文件項,并取出所述包文件內(nèi)的所有文件項;將收集到的包含修改文件內(nèi)容的文件項與對應(yīng)修改的從所述包文件中取出的文件項組合成一個文件項;以及將組合后的文件項中包含的文件信息分為至少兩組,并將所有文件項中包含文件數(shù)據(jù)的組中包含的文件信息按照使用時的順序進行排序;則寫模塊1203進一步用于將排序后得到的各組中的文件信息寫入包文件。上述文件打包裝置還可以包括第三修訂才莫塊,用于收集包含修改文件內(nèi)容的文件項;則寫模塊1203進一步用于將收集到的包含修改文件內(nèi)容的文件項寫到所述包文件尾部。相應(yīng)的,本發(fā)明實施例還提供一種文件提取的方法,用于從利用上述文件打包方法獲得的包文件中提取文件,如圖13所示,包括以下步驟步驟1310、提取包文件中包含指定的唯一性標識的組中的文件信息;步驟1320、根據(jù)提取到的文件信息確定所需文件數(shù)據(jù)所在的組的位置信臺i&,步驟1330、根據(jù)該位置信息提取所需文件數(shù)據(jù)所在的組中的文件信息。其中,所述包文件中包含至少一個文件,其中,每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息,且每個文件項所包含的文件信息被分為至少兩組。步驟1310中,提取包文件中包含指定的唯一性標識的組中的文件信息,包括根據(jù)用戶輸入的提取信息確定對應(yīng)的唯一性標識;根據(jù)確定出的唯一性標識提取對應(yīng)組中的文件信息。其中,所述唯一性標識為文件名稱或i各徑名稱。特別的,如果所有文件項中的唯一性標識的字節(jié)數(shù)相等,在對文件項進行排序后,可以使用多叉查找算法直接在組內(nèi)進行搜索。下面以上述包文件結(jié)構(gòu)為例,詳細說明上述文件提取方法的具體實施方式。其中,文件提取有以下兩種情況一、一般性文件提取1、打開包文件,讀取文件頭,并進行校驗等操作;2、依次讀取Entry,并對每個Entry進行如下操作(1)確定該Entry中是否包含用戶指定的唯一性標識;(2)若該Entry中包含該唯一性標識,則根據(jù)該Entry中的文件信息,如對應(yīng)的Bitstream的偏移,確定該對應(yīng)Bitstream的位置信息,并根據(jù)該位置信息提取該Bitstream中的文件信息;若該Entry中不包含該唯一性標識,則跳轉(zhuǎn)到下一個Entry。3、將提取到的Entry和Bitstream中的文件信息合并后返回給用戶。二、線性化讀取1、打開包文件,讀取文件頭,并進行校驗等操作;2、依次讀取Entiy,并對每個Entry進行如下操作(1)確定該Entry中是否包含用戶指定的唯一性標識;(2)若該Entry中包含該唯一性標識,則才艮據(jù)該Entry中的文件信息,如對應(yīng)的Bitstream的偏移,確定該對應(yīng)Bitstream的位置信息,并根據(jù)該位置信息提取該Bitstream中的文件信息;若該Entry中不包含該唯一性標識,則跳轉(zhuǎn)到下一個Entry。3、確定Bitstream中的文件信息是否提取完成,在提取完成后,將提取到的Entry和Bitstream中的文件信息合并后返回給用戶。相應(yīng)的,本發(fā)明實施例還提供一種文件提取的裝置,其結(jié)構(gòu)如圖14所示,包括第一提取模塊1410,用于提取包文件中包含指定的唯一性標識的組中的文件信息;確定模塊1420,用于根據(jù)所述提取到的文件信息確定所需文件數(shù)據(jù)所在的組的位置信息;第二提^^莫塊1430,用于根據(jù)所述位置信息提取所述文件數(shù)據(jù)所在的組中的文件信息。在本發(fā)明實施例中,對包文件中的內(nèi)容進行修改時,可以不將整個包文件進行重寫,而是將包含修改文件內(nèi)容的文件項以增量修改的形式寫入包文件尾部即可。另外,還可以達到保存包內(nèi)文件的歷史版本的目的。例如,在文件A被加入包文件之后,又對文件A進行修改,則可以將<務(wù)改后的文件A再次加入包文件,則包文件中包含文件A修改前后的文件內(nèi)容。而且,在本發(fā)明實施例中,可以將包內(nèi)文件的存儲順序按照用戶使用時的順序進行排列,從而使得包文件在網(wǎng)絡(luò)上進行線性傳輸時,可以按照用戶使用的順序獲取文件,從而達到線性化的效果。同時,本發(fā)明實施例還能夠通過提供的提取文件的方法,利用上述文件打包方法得到的包文件,快速、靈活的提取到用戶所需的文件。顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。權(quán)利要求1、一種文件打包的方法,其特征在于,包括收集待打包的文件,其中,每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息;將每個文件項所包含的文件信息分為至少兩組;根據(jù)各組的組標識將各組中的文件信息寫入包文件。2、如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)各組的組標識將各組中的文件信息寫入包文件之前,還包括將所有文件項組合為一個集合;在該集合中將組標識相同的各組中的文件信息組合成一個集合組;則所述根據(jù)各組的組標識將各組中的文件信息寫入包文件,包括根據(jù)各集合組的集合組標識將各集合組中的文件信息寫入包文件。3、如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)各組的組標識將各組中的文件信息寫入包文件之前,還包括將所有文件項分為多個集合;在每個集合中將組標識相同的各組中的文件信息組合成一個集合組;則所述根據(jù)各組的組標識將各組中的文件信息寫入包文件,包括根據(jù)所述集合中各集合組的集合組標識將各集合組中的文件信息寫入包文件。4、如權(quán)利要求1-3中任一項所述的方法,其特征在于,所述根據(jù)各組的組標識將各組中的文件信息寫入包文件之前,還包括將所有文件項進行排序;其中,所述進行排序的方式包括下述方式中的至少一種按照文件系統(tǒng)的結(jié)構(gòu)層次前序排列;按照實際使用時文件項的訪問順序排列;按照文件名稱或路徑名稱排列;按照收集文件項時的收集順序排列。5、如權(quán)利要求l所述的方法,其特征在于,所述文件信息中包含表示多個數(shù)據(jù)編碼方法排列順序的數(shù)據(jù)編碼方法序列;所述4艮據(jù)各組的組標識將各組中的文件信息寫入包文件之前,還包括根據(jù)所述數(shù)據(jù)編碼方法序列對所述文件信息中包含的數(shù)據(jù)進行數(shù)據(jù)編碼處理。6、如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)各組的組標識將各組中的文件信息寫入包文件之前,還包括將文件項進行合并。7、如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)各組的組標識將各組中的文件信息寫入包文件之后,還包括收集包含修改文件內(nèi)容的文件項,并取出所述包文件內(nèi)的所有文件項;將從所述包文件中取出的文件項與收集到的包含修改文件內(nèi)容的文件項進行合并;將合并后的文件項寫入包文件。8、如權(quán)利要求6或7所述的方法,其特征在于,所述文件信息中包含操作,所述操作是將所述包文件作為一個虛擬的存儲設(shè)備,在該存儲設(shè)備上進行的文件系統(tǒng)操作,并且每個文件項的文件信息中只包含一個操作。9、如權(quán)利要求8所述的方法,其特征在于,所述合并包括將操作具有邏輯關(guān)系的文件項進行合并,并將多個文件項中重復(fù)的文件信息刪減為一份,所述多個文件項是描述同一文件的多個文件項。10、如權(quán)利要求l所述的方法,其特征在于,所述4艮據(jù)各組的組標識將各組中的文件信息寫入包文件之后,還包括收集包含修改文件內(nèi)容的文件項,并取出所述包文件內(nèi)的所有文件項;將收集到的包含修改文件內(nèi)容的文件項與對應(yīng)修改的從所述包文件中取出的文件項組合成一個文件項;將組合后的文件項中包含的文件信息分為至少兩組,并將所有文件項中包含文件數(shù)據(jù)的組中包含的文件信息按照使用時的順序進行排序;將排序后得到的各組中的文件信息寫入包文件。11、如權(quán)利要求IO所述的方法,其特征在于,所述將排序后得到的各組中的文件信息寫入包文件,包括將排序后的所有文件項組合為一個集合;在該集合中將組標識相同的各組中的文件信息組合成一個集合組,得到兩個集合組文件描述信息塊和文件數(shù)據(jù)信息塊;將文件描述信息塊寫入包文件的開始部分,將文件數(shù)據(jù)信息塊寫入到所述文件描述信息塊后面,并設(shè)置文件描述信息塊中的ItemOffset指向文件數(shù)據(jù)信息塊的偏移位置。12、如權(quán)利要求l所述的方法,其特征在于,所述4艮據(jù)各組的組標識將各組中的文件信息寫入包文件之后,還包括收集包^^爹改文件內(nèi)容的文件項;將收集到的包含修改文件內(nèi)容的文件項寫到所述包文件尾部。13、如權(quán)利要求12所述的方法,其特征在于,所述將收集到的包含修改文件內(nèi)容的文件項寫到所述包文件尾部,包括在所述包文件尾部增加新的文件描述信息塊和文件數(shù)據(jù)信息塊;將所述包文件中最后的文件描述信息塊的Next指針指向所述新的文件描述信息塊的起始位置。14、如權(quán)利要求1所述的方法,其特征在于,所述包文件包括文件頭,描述包括版權(quán)版本信息和歷史版本數(shù)量的基本信息;文件描述信息塊,文件流入口描述,包括包文件內(nèi)文件流的位置;文件數(shù)據(jù)信息塊,多個文件流的順序組合,包括數(shù)據(jù)編碼方式的信息描述。15、一種用于實現(xiàn)多種功能的包文件,其特征在于,所述包文件包括文件頭,描述包括版權(quán)版本信息和歷史版本數(shù)量的基本信息;文件描述信息塊,文件流入口描述,包括包文件內(nèi)文件流的位置;文件數(shù)據(jù)信息塊,多個文件流的順序組合,包括數(shù)據(jù)編碼方式的信息描述。16、如權(quán)利要求15所述的包文件,其特征在于,所述文件頭描述的基本信息還包括下列信息中的至少一個主版本號、次版本號、文件描述信息塊的數(shù)目位參數(shù),第一個文件描述信息塊相對于所述文件頭的偏移位置。17、如權(quán)利要求15所述的包文件,其特征在于,所述文件描述信息塊還包括下列信息中的至少一個所述文件描述信息塊的類型標識、長度,文件數(shù)據(jù)信息塊的偏移位置,下一個文件描述信息塊的偏移位置,4交-瞼碼,包內(nèi)項入口描述,項操作命令,項偏移位置,項路徑。18、如權(quán)利要求15所述的包文件,其特征在于,所述文件數(shù)據(jù)信息塊還包括下列信息中的至少一個所述文件數(shù)據(jù)信息塊的類型標識,校驗碼,文件流長度,每個文件流生成時采用的壓縮,加密流程和文件流數(shù)據(jù)。19、一種文件打包的裝置,其特征在于,包括收集模塊,用于收集待打包的文件,其中每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息;分組模塊,用于將每個文件項所包含的文件信息分為至少兩組;寫模塊,用于根據(jù)各組的組標識將各組中的文件信息寫入包文件。20、如權(quán)利要求19所述的裝置,其特征在于,還包括第一集合組模塊,用于將所有文件項組合為一個集合;并在該集合中將組標識相同的各組中的文件信息組合成一個集合組;則所述寫模塊進一步用于根據(jù)各集合組的集合組標識將各集合組中的文件信息寫入包文件。21、如權(quán)利要求19所述的裝置,其特征在于,還包括第二集合組模塊,用于將所有文件項分為多個集合;并在每個集合中將組標識相同的各組中的文件信息組合成一個集合組;則所述寫模塊進一步用于根據(jù)所述集合中各集合組的集合組標識將各集合組中的文件信息寫入包文件。22、如權(quán)利要求19-21中任一項所述的裝置,其特征在于,還包括排序模塊,用于將所有文件項進行排序;其中,所述進^f亍排序的方式包括下述方式中的至少一種按照文件系統(tǒng)的結(jié)構(gòu)層次前序排列;按照實際使用時文件項的訪問順序排列;按照文件名稱或路徑名稱排列;按照收集文件項時的收集順序排列。23、如權(quán)利要求19所述的裝置,其特征在于,還包括編碼模塊,用于根據(jù)所述文件信息中包含的表示多個數(shù)據(jù)編碼方法排列順序的數(shù)據(jù)編碼方法序列對所述文件信息中的數(shù)據(jù)進4亍數(shù)據(jù)編碼處理。24、如權(quán)利要求19所述的裝置,其特征在于,還包括合并模塊,用于將文件項進行合并。25、如權(quán)利要求19所述的裝置,其特征在于,還包括第一修訂模塊,用于收集包含修改文件內(nèi)容的文件項,并取出所述包文件內(nèi)的所有文件項;以及將從所述包文件中取出的文件項與收集到的包含修改文件內(nèi)容的文件項進行合并;則所述寫模塊進一步用于將合并后的文件項寫入包文件。26、如權(quán)利要求24或25所述的裝置,其特征在于,所述文件信息中包含操作,所述操作是將所述包文件作為一個虛擬的存儲設(shè)備,在該存儲設(shè)備上進行的文件系統(tǒng)操作,并且每個文件項的文件信息中只包含一個才喿作;則所述裝置還包括合并模塊,用于將操作具有邏輯關(guān)系的文件項進行合并,并將多個文件項中重復(fù)的文件信息刪減為一份,所述多個文件項是描述同一文件的多個文件項。27、如權(quán)利要求19所述的裝置,其特征在于,還包括第二修訂模塊,用于收集包含修改文件內(nèi)容的文件項,并取出所述包文件內(nèi)的所有文件項;將收集到的包含修改文件內(nèi)容的文件項與對應(yīng)修改的從所述包文件中取出的文件項組合成一個文件項;以及將組合后的文件項中包含的文件信息分為至少兩組,并將所有文件項中包含文件數(shù)據(jù)的組中包含的文件信息按照使用時的順序進行排序;則所述寫模塊進一步用于將排序后得到的各組中的文件信息寫入包文件。28、如權(quán)利要求19所述的裝置,其特征在于,還包括第三修訂模塊,用于收集包含修改文件內(nèi)容的文件項;則所述寫模塊進一步用于將收集到的包含修改文件內(nèi)容的文件項寫到所述包文件尾部。29、一種文件提取的方法,其特征在于,包括提取包文件中包含指定的唯一性標識的組中的文件信息;根據(jù)所述提取到的文件信息確定所需文件數(shù)據(jù)所在的組的位置信息;根據(jù)所述位置信息提取所述文件數(shù)據(jù)所在的組中的文件信息。30、如權(quán)利要求29所述的方法,其特征在于,所述包文件中包含至少一個文件,其中,每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息,且每個文件項所包含的文件信息被分為至少兩組。31、如權(quán)利要求29所述的方法,其特征在于,所述提取包文件中包含指定的唯一性標識的組中的文件信息,包括根據(jù)用戶輸入的提取信息確定對應(yīng)的唯一性標識;根據(jù)確定出的唯一性標識提取對應(yīng)組中的文件信息。32、如權(quán)利要求29或31所述的方法,其特征在于,所述唯一性標識為文件名稱或路徑名稱。33、如權(quán)利要求30所述的方法,其特征在于,所有文件項中的所述唯一性標識的字節(jié)數(shù)相等。34、一種文件提取的裝置,其特征在于,包括第一提取模塊,用于提取包文件中包含指定的唯一性標識的組中的文件信自.確定模塊,用于根據(jù)所述提取到的文件信息確定所需文件數(shù)據(jù)所在的組的位置信息;第二提取模塊,用于根據(jù)所述位置信息提取所述文件數(shù)據(jù)所在的組中的文件信息。全文摘要本發(fā)明公開了一種文件打包、提取的方法和裝置,以解決現(xiàn)有技術(shù)中打包工具不夠靈活且功能不夠全面的問題。文件打包的方法包括收集待打包的文件,其中,每個文件由至少一個文件項來描述,每個文件項包含多個用于描述文件內(nèi)容的文件信息;將每個文件項所包含的文件信息分為至少兩組;根據(jù)各組的組標識將各組中的文件信息寫入包文件。文件提取的方法包括提取包文件中包含指定的唯一性標識的組中的文件信息;根據(jù)所述提取到的文件信息確定所需文件數(shù)據(jù)所在的組的位置信息;根據(jù)所述位置信息提取所述文件數(shù)據(jù)所在的組中的文件信息。通過上述文件打包、提取方法,使得文件打包和提取時更加的靈活。文檔編號G06F17/30GK101655877SQ200910202918公開日2010年2月24日申請日期2009年5月18日優(yōu)先權(quán)日2008年10月14日發(fā)明者仇睿恒,幟湯,毅王申請人:北京大學(xué);北大方正集團有限公司;北京方正阿帕比技術(shù)有限公司