本發(fā)明涉及應(yīng)用程序開發(fā)領(lǐng)域,具體地說,涉及一種應(yīng)用程序條目化數(shù)據(jù)壓縮打包方法。
背景技術(shù):
數(shù)據(jù)打包是程序應(yīng)用發(fā)布中經(jīng)常需要使用的一種技術(shù),在應(yīng)用開發(fā)中,經(jīng)常需要大量使用各種數(shù)據(jù)文件,為了使得應(yīng)用發(fā)布簡(jiǎn)單清潔,也為了對(duì)應(yīng)用數(shù)據(jù)進(jìn)行保護(hù),經(jīng)常需要使用進(jìn)行數(shù)據(jù)打包?,F(xiàn)在常用的數(shù)據(jù)打包技術(shù)中,沒有很好的解決數(shù)據(jù)索引存儲(chǔ)的擴(kuò)展問題,而且讀取數(shù)據(jù)時(shí),需要依次讀取數(shù)據(jù),讀取量大,存在開發(fā)時(shí)不太方便更換應(yīng)用數(shù)據(jù),也難以同時(shí)應(yīng)用多個(gè)打包數(shù)據(jù)文件能問題,且文件壓縮率低,數(shù)據(jù)安全無法得到有效保障。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述問題,本發(fā)明提供一種能夠?qū)崿F(xiàn)數(shù)據(jù)連續(xù)存儲(chǔ)和索引擴(kuò)展方便的條目化數(shù)據(jù)壓縮打包方法。
本發(fā)明的一種條目化數(shù)據(jù)壓縮打包方法,包括打包過程與數(shù)據(jù)讀取過程;其中,所述打包過程如下步驟:
S1、初始化需要打包的數(shù)據(jù),建立文件頭;
S2、從初始化的數(shù)據(jù)中獲取數(shù)據(jù)索引條目和需要打包的數(shù)據(jù);
S3、緊跟文件頭,根據(jù)從初始化數(shù)據(jù)中獲得的數(shù)據(jù)索引條目創(chuàng)建索引數(shù)據(jù)節(jié)點(diǎn)信息,預(yù)設(shè)索引數(shù)據(jù)節(jié)點(diǎn)尺寸,索引數(shù)據(jù)節(jié)點(diǎn)信息存儲(chǔ)為索引數(shù)據(jù)塊;同時(shí),根據(jù)從初始化數(shù)據(jù)中獲得的需要打包的數(shù)據(jù)創(chuàng)建數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)信息,預(yù)設(shè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)尺寸,數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)包含區(qū)塊化數(shù)據(jù),并存儲(chǔ)為數(shù)據(jù)存儲(chǔ)塊;索引數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)一一映射;
S4、分別填充索引數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),直到大于了預(yù)設(shè)的節(jié)點(diǎn)尺寸;索引數(shù)據(jù)節(jié)點(diǎn)填充的是數(shù)據(jù)索引條目,數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)填充的是其對(duì)應(yīng)的索引條目所索引的數(shù)據(jù);
S5、根據(jù)創(chuàng)建的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)信息,將每一節(jié)點(diǎn)數(shù)據(jù)壓縮加密后寫入打包數(shù)據(jù)文件中,創(chuàng)建新的數(shù)據(jù)結(jié)點(diǎn),繼續(xù)寫入數(shù)據(jù),直至數(shù)據(jù)寫入完畢。
此外,所述數(shù)據(jù)讀取過程包括如下步驟:
D1、讀取打包數(shù)據(jù)文件頭;
D2、讀取所有索引條目信息,并存儲(chǔ)于內(nèi)存中;
D3、當(dāng)讀取指定條目時(shí),在所有索引條目信息中查詢?cè)摋l目;如果索引信息中不存在該條目,則在指定的文件中查找以該條目為名稱的文件,并返回文件中的數(shù)據(jù);如果索引條目信息中存在該條目,則讀取索引信息,找到索引信息映射的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),轉(zhuǎn)到步驟D4;
D4、讀出索引信息映射的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中包含的數(shù)據(jù)區(qū)塊中的數(shù)據(jù),進(jìn)行解密、解壓處理,并根據(jù)指定條目偏移到條目索引的數(shù)據(jù)節(jié)點(diǎn)所指定的位置,讀出指定長(zhǎng)度的數(shù)據(jù),然后返回讀取到的數(shù)據(jù)。
在對(duì)數(shù)據(jù)打包過程中,打包文件包括文件頭以及與所述文件頭相連的兩個(gè)相互獨(dú)立的索引鏈和數(shù)據(jù)鏈。所述索引鏈存儲(chǔ)索引數(shù)據(jù)節(jié)點(diǎn)信息,所述數(shù)據(jù)鏈存儲(chǔ)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)信息。所述索引鏈包括索引數(shù)據(jù)塊1、索引數(shù)據(jù)塊2、……索引數(shù)據(jù)塊n(n≥2),每一索引數(shù)據(jù)塊對(duì)應(yīng)一個(gè)索引數(shù)據(jù)節(jié)點(diǎn);所述數(shù)據(jù)鏈包括數(shù)據(jù)存儲(chǔ)塊1、數(shù)據(jù)存儲(chǔ)塊2、……數(shù)據(jù)存儲(chǔ)塊n(n≥2),每一數(shù)據(jù)存儲(chǔ)塊對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);所述索引數(shù)據(jù)塊與數(shù)據(jù)存儲(chǔ)塊一一映射。
所述每一索引數(shù)據(jù)塊結(jié)尾處存儲(chǔ)有下一索引節(jié)點(diǎn)地址,相應(yīng)的,所述每一數(shù)據(jù)存儲(chǔ)塊結(jié)尾處存儲(chǔ)有下一數(shù)據(jù)節(jié)點(diǎn)地址。
所述數(shù)據(jù)鏈中的數(shù)據(jù)存儲(chǔ)塊將需要打包的數(shù)據(jù)進(jìn)行連續(xù)存儲(chǔ),當(dāng)需要增加打包數(shù)據(jù)時(shí),直接在數(shù)據(jù)存儲(chǔ)塊尾部按照預(yù)設(shè)的數(shù)據(jù)節(jié)點(diǎn)尺寸依次添加數(shù)據(jù),并修改上一條數(shù)據(jù)存儲(chǔ)塊尾部信息,使其指定到新增的數(shù)據(jù)節(jié)點(diǎn)地址。
本發(fā)明解決了現(xiàn)有技術(shù)下,打包數(shù)據(jù)讀取量大,不方便連續(xù)存儲(chǔ)以及索引擴(kuò)展的問題。采用本發(fā)明的條目化數(shù)據(jù)壓縮打包方法,接口程序可以同時(shí)掛載多個(gè)打包數(shù)據(jù)文件,無需讀取所有數(shù)據(jù),只需要讀取打包數(shù)據(jù)對(duì)應(yīng)的索引條目,如果在索引條目中找不到指定的條目時(shí),再在相應(yīng)的文件中查找對(duì)應(yīng)文件;遇到需要新增打包數(shù)據(jù)時(shí),只需要在索引數(shù)據(jù)塊和數(shù)據(jù)存儲(chǔ)塊的尾部進(jìn)行增加和修改,實(shí)現(xiàn)連續(xù)遞增存儲(chǔ);這一特性大大方便了應(yīng)用的調(diào)試開發(fā),只需要在程序發(fā)布時(shí)將所有數(shù)據(jù)文件打包到同一個(gè)數(shù)據(jù)包中。
同時(shí),采用本發(fā)明的條目化數(shù)據(jù)壓縮打包方法生成打包數(shù)據(jù)文件時(shí),將文件以兩個(gè)獨(dú)立的存儲(chǔ)鏈分別存儲(chǔ)條目索引和區(qū)塊化數(shù)據(jù),針對(duì)每一個(gè)數(shù)據(jù)存儲(chǔ)塊進(jìn)行壓縮加密,大大提高壓縮速率,減小文件尺寸,增加文件壓縮比,這邊不僅可以大大提高指定條目的讀取數(shù)據(jù),也可以極大提高數(shù)據(jù)壓縮率。同時(shí)支持對(duì)索引和數(shù)據(jù)的雙重加密,有效保障數(shù)據(jù)安全。
附圖說明
圖1是本發(fā)明的條目化數(shù)據(jù)壓縮打包方法的打包數(shù)據(jù)存儲(chǔ)方式示意圖。
具體實(shí)施方式
為了更好的理解本發(fā)明,下面結(jié)合附圖詳細(xì)說明本發(fā)明。
本發(fā)明的一種條目化數(shù)據(jù)壓縮打包方法,包括打包過程與數(shù)據(jù)讀取過程;其中,所述打包過程如下步驟:
S1、初始化需要打包的數(shù)據(jù),建立文件頭;
S2、從初始化的數(shù)據(jù)中獲取數(shù)據(jù)索引條目和需要打包的數(shù)據(jù);
S3、緊跟文件頭,根據(jù)從初始化數(shù)據(jù)中獲得的數(shù)據(jù)索引條目創(chuàng)建索引數(shù)據(jù)節(jié)點(diǎn)信息,預(yù)設(shè)索引數(shù)據(jù)節(jié)點(diǎn)尺寸,索引數(shù)據(jù)節(jié)點(diǎn)信息存儲(chǔ)為索引數(shù)據(jù)塊;同時(shí),根據(jù)從初始化數(shù)據(jù)中獲得的需要打包的數(shù)據(jù)創(chuàng)建數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)信息,預(yù)設(shè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)尺寸,數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)包含區(qū)塊化數(shù)據(jù),并存儲(chǔ)為數(shù)據(jù)存儲(chǔ)塊;索引數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)一一映射;
S4、分別填充索引數(shù)據(jù)節(jié)點(diǎn)和數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),直到大于了預(yù)設(shè)的節(jié)點(diǎn)尺寸;索引數(shù)據(jù)節(jié)點(diǎn)填充的是數(shù)據(jù)索引條目,數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)填充的是其對(duì)應(yīng)的索引條目所索引的數(shù)據(jù);
S5、根據(jù)創(chuàng)建的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)信息,將每一節(jié)點(diǎn)數(shù)據(jù)壓縮加密后寫入打包數(shù)據(jù)文件中,創(chuàng)建新的數(shù)據(jù)結(jié)點(diǎn),繼續(xù)寫入數(shù)據(jù),直至數(shù)據(jù)寫入完畢。
此外,所述數(shù)據(jù)讀取過程包括如下步驟:
D1、讀取打包數(shù)據(jù)文件頭;
D2、讀取所有索引條目信息,并存儲(chǔ)于內(nèi)存中;
D3、當(dāng)讀取指定條目時(shí),在所有索引條目信息中查詢?cè)摋l目;如果索引信息中不存在該條目,則在指定的文件中查找以該條目為名稱的文件,并返回文件中的數(shù)據(jù);如果索引條目信息中存在該條目,則讀取索引信息,找到索引信息映射的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),轉(zhuǎn)到步驟D4;
D4、讀出索引信息映射的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中包含的數(shù)據(jù)區(qū)塊中的數(shù)據(jù),進(jìn)行解密、解壓處理,并根據(jù)指定條目偏移到條目索引的數(shù)據(jù)節(jié)點(diǎn)所指定的位置,讀出指定長(zhǎng)度的數(shù)據(jù),然后返回讀取到的數(shù)據(jù)。
如圖1所示,在對(duì)數(shù)據(jù)打包過程中,打包文件包括文件頭以及與所述文件頭相連的兩個(gè)相互獨(dú)立的索引鏈和數(shù)據(jù)鏈。所述索引鏈存儲(chǔ)索引數(shù)據(jù)節(jié)點(diǎn)信息,所述數(shù)據(jù)鏈存儲(chǔ)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)信息。所述索引鏈包括索引數(shù)據(jù)塊1、索引數(shù)據(jù)塊2、……索引數(shù)據(jù)塊n(n≥2),每一索引數(shù)據(jù)塊對(duì)應(yīng)一個(gè)索引數(shù)據(jù)節(jié)點(diǎn);所述數(shù)據(jù)鏈包括數(shù)據(jù)存儲(chǔ)塊1、數(shù)據(jù)存儲(chǔ)塊2、……數(shù)據(jù)存儲(chǔ)塊n(n≥2),每一數(shù)據(jù)存儲(chǔ)塊對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn);所述索引數(shù)據(jù)塊與數(shù)據(jù)存儲(chǔ)塊一一映射。
所述每一索引數(shù)據(jù)塊結(jié)尾處存儲(chǔ)有下一索引節(jié)點(diǎn)地址,相應(yīng)的,所述每一數(shù)據(jù)存儲(chǔ)塊結(jié)尾處存儲(chǔ)有下一數(shù)據(jù)節(jié)點(diǎn)地址。
所述數(shù)據(jù)鏈中的數(shù)據(jù)存儲(chǔ)塊將需要打包的數(shù)據(jù)進(jìn)行連續(xù)存儲(chǔ),當(dāng)需要增加打包數(shù)據(jù)時(shí),直接在數(shù)據(jù)存儲(chǔ)塊尾部按照預(yù)設(shè)的數(shù)據(jù)節(jié)點(diǎn)尺寸依次添加數(shù)據(jù),并修改上一條數(shù)據(jù)存儲(chǔ)塊尾部信息,使其指定到新增的數(shù)據(jù)節(jié)點(diǎn)地址。
本發(fā)明解決了現(xiàn)有技術(shù)下,打包數(shù)據(jù)讀取量大,不方便連續(xù)存儲(chǔ)以及索引擴(kuò)展的問題。采用本發(fā)明的條目化數(shù)據(jù)壓縮打包方法,接口程序可以同時(shí)掛載多個(gè)打包數(shù)據(jù)文件,無需讀取所有數(shù)據(jù),只需要讀取打包數(shù)據(jù)對(duì)應(yīng)的索引條目,如果在索引條目中找不到指定的條目時(shí),再在相應(yīng)的文件中查找對(duì)應(yīng)文件;遇到需要新增打包數(shù)據(jù)時(shí),只需要在索引數(shù)據(jù)塊和數(shù)據(jù)存儲(chǔ)塊的尾部進(jìn)行增加和修改,實(shí)現(xiàn)連續(xù)遞增存儲(chǔ);這一特性大大方便了應(yīng)用的調(diào)試開發(fā),只需要在程序發(fā)布時(shí)將所有數(shù)據(jù)文件打包到同一個(gè)數(shù)據(jù)包中。
同時(shí),采用本發(fā)明的條目化數(shù)據(jù)壓縮打包方法生成打包數(shù)據(jù)文件時(shí),將文件以兩個(gè)獨(dú)立的存儲(chǔ)鏈分別存儲(chǔ)條目索引和區(qū)塊化數(shù)據(jù),針對(duì)每一個(gè)數(shù)據(jù)存儲(chǔ)塊進(jìn)行壓縮加密,大大提高壓縮速率,減小文件尺寸,增加文件壓縮比,這邊不僅可以大大提高指定條目的讀取數(shù)據(jù),也可以極大提高數(shù)據(jù)壓縮率。同時(shí)支持對(duì)索引和數(shù)據(jù)的雙重加密,有效保障數(shù)據(jù)安全。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明披露的技術(shù)范圍內(nèi),根據(jù)本發(fā)明的技術(shù)方案及其發(fā)明構(gòu)思加以等同替換或改變,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。