本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別是涉及一種SNB電子書(shū)存儲(chǔ)結(jié)構(gòu);本發(fā)明還涉及所述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的寫(xiě)入方法和讀取方法。
背景技術(shù):
隨著當(dāng)前科技的高速發(fā)展,互聯(lián)網(wǎng)閱讀用戶越來(lái)越多,大量的用戶喜歡在各種設(shè)備上閱讀文檔,這種跨屏閱讀的需求在數(shù)據(jù)的存儲(chǔ)和分發(fā)上對(duì)電子書(shū)格式提出來(lái)高質(zhì)量的要求。
互聯(lián)網(wǎng)上的電子書(shū)有兩個(gè)重要特點(diǎn)。其中一個(gè)特點(diǎn)是一本書(shū)的的章節(jié)有免費(fèi)章節(jié)和收費(fèi)章節(jié)之分,作者一般先在網(wǎng)絡(luò)上發(fā)布一些免費(fèi)章節(jié)當(dāng)把書(shū)的世界觀交代完成進(jìn)入核心沖突的時(shí)候就會(huì)發(fā)布vip章節(jié)也就是收費(fèi)章節(jié)。還有一個(gè)特點(diǎn)是電子書(shū)的閱讀是以章節(jié)為單位的,讀者一次只會(huì)下載某些章節(jié)來(lái)閱讀。上面的兩個(gè)問(wèn)題可以歸結(jié)為部分版權(quán)和持續(xù)加載兩個(gè)問(wèn)題,這兩個(gè)問(wèn)題的解決是實(shí)現(xiàn)在線收費(fèi)閱讀的基礎(chǔ),目前沒(méi)有工具和協(xié)議來(lái)解決該問(wèn)題。
發(fā)明新型內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是提供一種能克服部分版權(quán)和持續(xù)加載造成現(xiàn)有電子書(shū)存儲(chǔ)結(jié)構(gòu)讀寫(xiě)不便的SNB電子書(shū)存儲(chǔ)結(jié)構(gòu);本發(fā)明還提供了所述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的寫(xiě)入方法和讀取方法。
為解決上述技術(shù)問(wèn)題本發(fā)明提供的SNB電子書(shū)存儲(chǔ)結(jié)構(gòu),包括:
所述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)劃分為頭文件區(qū)、內(nèi)容控制區(qū)和內(nèi)容區(qū);
頭文件區(qū)占8個(gè)字節(jié)用于存儲(chǔ)電子書(shū)是否加密標(biāo)示位和壓縮方法代號(hào)信息,前4個(gè)字節(jié)存儲(chǔ)是否加密標(biāo)示位,而加密的詳細(xì)信息,比如采用密鑰的長(zhǎng)度,采用的加密方法、加密段開(kāi)始、結(jié)束的偏移量等信息存儲(chǔ)在內(nèi)容控制區(qū)的附加信息區(qū),后4個(gè)字節(jié)存儲(chǔ)采用的壓縮算法代號(hào)。
內(nèi)容控制區(qū)占36個(gè)字節(jié)用于存儲(chǔ):
分段規(guī)則:用4個(gè)字節(jié)描述每個(gè)分段的字節(jié)數(shù)量;
元數(shù)據(jù)數(shù)量:用4個(gè)字節(jié)描述存儲(chǔ)元數(shù)據(jù)組的數(shù)量;
元數(shù)據(jù)區(qū)在內(nèi)容區(qū)的偏移量:該偏移量是整型數(shù)用4個(gè)字節(jié)來(lái)存儲(chǔ),該數(shù)據(jù)表明元數(shù)據(jù)占用了內(nèi)容區(qū)開(kāi)始的字節(jié)數(shù),元數(shù)據(jù)是指SNB的特征描述字符串,該部分用于擴(kuò)充SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的功能;所述整型數(shù)(INTEGER)是不包含小數(shù)部分的數(shù)值型數(shù)。
文件數(shù)量:用4個(gè)字節(jié)描述存儲(chǔ)電子書(shū)包含的子級(jí)目錄內(nèi)文件數(shù)量;
目錄區(qū)在內(nèi)容區(qū)的偏移量:是個(gè)整型數(shù)用4個(gè)字節(jié)來(lái)存儲(chǔ),該數(shù)據(jù)表明目錄信息占用內(nèi)容區(qū)里元數(shù)據(jù)區(qū)后的字節(jié)數(shù),目錄區(qū)是指書(shū)的一種邏輯劃分,比如書(shū)的專(zhuān)題信息,章節(jié)列表信息;
壓縮目錄區(qū)占用空間(占用字節(jié)數(shù)量,是否可以理解為占用空間):用4個(gè)字節(jié)描述目錄區(qū)壓縮后的字節(jié)數(shù)量;
未壓縮內(nèi)容在內(nèi)容區(qū)的偏移量:是整型數(shù)占用4個(gè)字節(jié),該數(shù)據(jù)表明未壓縮內(nèi)容占用內(nèi)容區(qū)里目錄區(qū)后的字節(jié)數(shù),未壓縮內(nèi)容一般是指書(shū)的免費(fèi)章節(jié);
壓縮內(nèi)容在內(nèi)容區(qū)的偏移量:是整型數(shù)占用4個(gè)字節(jié),該數(shù)據(jù)表明壓縮內(nèi)容占用內(nèi)容區(qū)里未壓縮內(nèi)容區(qū)后的字節(jié)數(shù),壓縮內(nèi)容一般是書(shū)的收費(fèi)章節(jié);
附加信息區(qū)在內(nèi)容區(qū)的偏移量:是整型數(shù)占用4個(gè)字節(jié),該數(shù)據(jù)表明附加信息占用內(nèi)容區(qū)里壓縮內(nèi)容區(qū)后的字節(jié)數(shù),附加信息指的是SNB格式的控制信息,這些控制信息包含SNB采用加密的方法,加密的秘鑰,加密段的開(kāi)始、結(jié)束的偏移量;
內(nèi)容區(qū):存儲(chǔ)電子書(shū)的內(nèi)容,至少包括以下內(nèi)容:
book.snbf存儲(chǔ)電子書(shū)的概要信息,概要信息包含書(shū)的編碼、封面、語(yǔ)言、發(fā)行商、制作商、創(chuàng)建時(shí)間;
toc.snbf存儲(chǔ)電子書(shū)的一種專(zhuān)題劃分,存儲(chǔ)的信息包含專(zhuān)題的名字、描述和包含的章節(jié)列表;
toc_content.snbf存儲(chǔ)電子書(shū)的章節(jié)列表信息,章節(jié)列表信息主要包含卷信息、章節(jié)名稱(chēng)和章節(jié)列表;
chapter.snbc主要存儲(chǔ)電子書(shū)一個(gè)章節(jié)的內(nèi)容。
所述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的寫(xiě)入方法,包括以下步驟:
1)創(chuàng)建電子書(shū)邏輯文件:概要文件、索引文件和內(nèi)容文件;
概要文件:至少包括:版本、作者、語(yǔ)言、書(shū)名、發(fā)行方、制作方信息;
索引文件:存儲(chǔ)預(yù)設(shè)的電子書(shū)邏輯劃分規(guī)則;
內(nèi)容文件:存儲(chǔ)電子書(shū)一個(gè)章節(jié)的內(nèi)容;
2)寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu);
a:獲取電子書(shū)的內(nèi)容信息,即獲取組成電子書(shū)的snbc類(lèi)文件的內(nèi)容也就是章節(jié)的內(nèi)容,根據(jù)需求先加密再壓縮書(shū)的內(nèi)容;
b:獲取電子書(shū)的索引信息,即獲取電子書(shū)的snbf類(lèi)文件內(nèi)容,包含書(shū)的概要信息book.snbf,專(zhuān)題信息toc.snbf和章節(jié)列表信息toc_content.snbf;
c:按照分段規(guī)則將書(shū)的內(nèi)容信息和索引信息劃分成不同的段,該長(zhǎng)度的計(jì)算是根據(jù)存儲(chǔ)書(shū)內(nèi)容的字節(jié)大小計(jì)算的,假設(shè)內(nèi)容的字節(jié)大小是A則A除以64則得到該數(shù)值;
d:將是否加密標(biāo)示位寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第1~第4字節(jié);將壓縮算法的代號(hào)寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第5~第8字節(jié);該步驟構(gòu)建了SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的頭文件區(qū);
e:將分段規(guī)則寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第9~第12字節(jié);
將元數(shù)據(jù)數(shù)量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第13~第16字節(jié);
將元數(shù)據(jù)區(qū)在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第17~第20字節(jié);
將文件數(shù)量寫(xiě)入到SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第21~第24字節(jié);
將目錄區(qū)在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第25~第28字節(jié);
將壓縮目錄區(qū)占用空間寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第29~第32字節(jié);
將未壓縮內(nèi)容在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第33~第36字節(jié);
將壓縮內(nèi)容在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第37~第40字節(jié);
將附加信息區(qū)在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第41~第44字節(jié);
該步驟構(gòu)建SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的內(nèi)容控制區(qū);
f:從SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的45個(gè)字節(jié)開(kāi)始依次寫(xiě)入書(shū)的元數(shù)據(jù)信息,目錄區(qū)信息,未壓縮內(nèi)容信息,壓縮內(nèi)容信息和附加內(nèi)容信息;該步構(gòu)建了SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的內(nèi)容區(qū)。
所述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的讀取方法,包括以下步驟:
a)解析SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的頭文件區(qū),根據(jù)第1~第4字節(jié)的數(shù)值判斷SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)是否加密,將讀取的四個(gè)字節(jié)數(shù)據(jù)轉(zhuǎn)換為字符,如果轉(zhuǎn)換后的字符為E則該SNB文件采用了加密方法否則該SNB文件內(nèi)容沒(méi)有加密;根據(jù)第5~第8字節(jié)的數(shù)值判斷SNB 電子書(shū)存儲(chǔ)結(jié)構(gòu)的壓縮算法,將讀取的四個(gè)字節(jié)轉(zhuǎn)換為字符如果該字符為B則采用了BZIP2壓縮算法,如果是0則采用了GZIP壓縮算法。
b)解析SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的控制區(qū);
由第9~第12字節(jié)存儲(chǔ)的數(shù)值獲取分段規(guī)則;
由第13~第16字節(jié)存儲(chǔ)的數(shù)值獲取元數(shù)據(jù)數(shù)量;
由第17~第20字節(jié)存儲(chǔ)的數(shù)值獲取元數(shù)據(jù)區(qū)在內(nèi)容區(qū)的偏移量;
由第21~第24字節(jié)存儲(chǔ)的數(shù)值獲取文件數(shù)量;
由第25~第28字節(jié)存儲(chǔ)的數(shù)值獲取目錄區(qū)在內(nèi)容區(qū)的偏移量;
由第29~第32字節(jié)存儲(chǔ)的數(shù)值獲取壓縮目錄區(qū)占用空間;
由第33~第36字節(jié)存儲(chǔ)的數(shù)值獲取未壓縮內(nèi)容在內(nèi)容區(qū)的偏移量;
由第37~第40字節(jié)存儲(chǔ)的數(shù)值獲取壓縮內(nèi)容在內(nèi)容區(qū)的偏移量;
由第41~第44字節(jié)存儲(chǔ)的數(shù)值獲取附加信息區(qū)在內(nèi)容區(qū)的偏移量;
c)解析元數(shù)據(jù),元數(shù)據(jù)區(qū)在內(nèi)容區(qū)的偏移量存儲(chǔ)在內(nèi)容控制區(qū)的第17~第20字節(jié)中,獲取內(nèi)容控制區(qū)第17~第20字節(jié)的數(shù)值O,則從第45字節(jié)~45+O字節(jié)為元數(shù)據(jù)區(qū);元數(shù)據(jù)區(qū)的格式為長(zhǎng)度+內(nèi)容,先獲取元數(shù)據(jù)區(qū)的第1~第4字節(jié),然后根據(jù)該4個(gè)字節(jié)的數(shù)值大小獲取元數(shù)據(jù)的內(nèi)容,重復(fù)該步驟得到多個(gè)元數(shù)據(jù);
d)解析目錄區(qū),目錄區(qū)占用空間存儲(chǔ)在內(nèi)容控制區(qū)的第25~第28字節(jié)中,獲取內(nèi)容為P,則從第45+O字節(jié)~第45+O+P字節(jié)為目錄區(qū);
如果目錄區(qū)大小和壓縮目錄區(qū)大小不一致則根據(jù)第5~第8字節(jié)存儲(chǔ)的壓縮算法來(lái)解壓縮目錄區(qū)。
e)解析內(nèi)容區(qū);
解析未壓縮內(nèi)容區(qū),獲取內(nèi)容控制區(qū)第33~第36字節(jié)的數(shù)值Q,則第45+O+P字節(jié)~第45+O+P+Q字節(jié)為未壓縮內(nèi)容區(qū),讀取該部分得到未壓縮內(nèi)容,然后根據(jù)第9~第12字節(jié)存儲(chǔ)的分段規(guī)則拆分成多個(gè)章節(jié);
解析壓縮內(nèi)容區(qū),獲取內(nèi)容控制區(qū)第37~第40字節(jié)的數(shù)值R,則第45+O+P+Q字節(jié)~第45+O+P+Q+R字節(jié)為壓縮內(nèi)容區(qū),根據(jù)頭文件存儲(chǔ)的壓縮算法代號(hào)找出相應(yīng)的解壓縮算法解壓縮該部分內(nèi)容;
解析附加信息區(qū),獲取內(nèi)容控制區(qū)第41~第44字節(jié)的數(shù)值S,第45+O+P+Q+R字節(jié)~ 第45+O+P+Q+R+S字節(jié)為附加信息區(qū);獲取該部分字節(jié)記載的加密方法、秘鑰長(zhǎng)度;以及加密段信息開(kāi)始、結(jié)束信息解密對(duì)應(yīng)的段內(nèi)容,根據(jù)分段規(guī)則拆分為章節(jié)。
由于本發(fā)明是按照段來(lái)壓縮和加密數(shù)據(jù),一個(gè)SNB文件中會(huì)同時(shí)存在加密和未加密的段,因此能解決決部分版權(quán)問(wèn)題,本發(fā)明的SNB文件邏輯上有多個(gè)文件組成,獲取內(nèi)容的時(shí)候只需要讀取文件頭和響應(yīng)的章節(jié)信息即可,因此能解決持續(xù)加載的問(wèn)題。
附圖說(shuō)明
下面結(jié)合附圖與具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明:
圖1是本發(fā)明SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)一實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
如圖1所示,本發(fā)明提供的一種SNB電子書(shū)存儲(chǔ)結(jié)構(gòu),包括:
SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)整體分為三個(gè)區(qū),即頭文件區(qū),內(nèi)容控制區(qū)和內(nèi)容區(qū)。頭文件區(qū)存儲(chǔ)加密和壓縮信息;內(nèi)容控制區(qū)存儲(chǔ)內(nèi)容區(qū)的劃分信息;內(nèi)容區(qū)存儲(chǔ)電子書(shū)的內(nèi)容。以下詳細(xì)描述:
頭文件區(qū)
X:占4個(gè)字節(jié),描述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)加密信息。取值P代表不加密;取值E代表加密。
Y:占4字節(jié),描述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)壓縮算法代號(hào)。取值B代表采用BZIP2壓縮算法;取值0代表GZIP壓縮算法。
內(nèi)容控制區(qū)
a分段規(guī)則:占4個(gè)字節(jié),存儲(chǔ)每段的字節(jié)容量;
b元數(shù)據(jù)數(shù)量:占4個(gè)字節(jié),存儲(chǔ)元數(shù)據(jù)有多少組;
c元數(shù)據(jù)區(qū)在內(nèi)容區(qū)的偏移量:占4個(gè)字節(jié),描述內(nèi)容區(qū)開(kāi)始的多少個(gè)字節(jié)存儲(chǔ)了文件的可變信息。該可變信息主要用于提供冗余空間供SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)擴(kuò)展新的功能;
d文件數(shù)量:占4個(gè)字節(jié),存儲(chǔ)電子書(shū)包含的子級(jí)目錄內(nèi)文件數(shù)量;
e目錄區(qū)在內(nèi)容區(qū)的偏移量:占4個(gè)字節(jié),描述內(nèi)容區(qū)接下來(lái)多少字節(jié)存儲(chǔ)的是目錄信息;
f壓縮目錄區(qū)占用空間:占4個(gè)字節(jié),存儲(chǔ)壓縮后目錄區(qū)的大小,如果目錄區(qū)占用 空間和壓縮目錄區(qū)占用空間不一致則表明目錄區(qū)采用了壓縮算法;
g未壓縮內(nèi)容在內(nèi)容區(qū)的偏移量:占4個(gè)字節(jié),描述內(nèi)容區(qū)接下來(lái)的多少字節(jié)存儲(chǔ)的是未壓縮的內(nèi)容;
h壓縮內(nèi)容在內(nèi)容區(qū)的偏移量:占4個(gè)字節(jié),描述內(nèi)容區(qū)接下來(lái)的多少個(gè)字節(jié)存儲(chǔ)的是壓縮內(nèi)容;
i附加信息區(qū)在內(nèi)容區(qū)的偏移量:占4個(gè)字節(jié),描述內(nèi)容區(qū)接下來(lái)多少字節(jié)存儲(chǔ)的是附加信息,附加信心包含加密的方法,秘鑰的長(zhǎng)度等信息。
內(nèi)容區(qū)
C:存儲(chǔ)SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的元數(shù)據(jù),該部分主要用于擴(kuò)充格式功能,是冗余數(shù)據(jù)
E:目錄區(qū),主要存儲(chǔ)書(shū)籍的目錄信息,包含三種文件
1:書(shū)的概要信息book.snbf,
2:專(zhuān)題信息toc.snbf
3:和章節(jié)列表信息toc_content.snbf
G:未壓縮內(nèi)容區(qū),主要存儲(chǔ)數(shù)據(jù)的免費(fèi)章節(jié)信息
H:壓縮內(nèi)容區(qū),主要存儲(chǔ)書(shū)籍的收費(fèi)章節(jié)信息
I:附加信息區(qū),主要存儲(chǔ)SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)采用的加密詳細(xì)信息,詳細(xì)信息包含采用的加密算法,秘鑰的長(zhǎng)度等。
一種所述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的寫(xiě)入方法,包括以下步驟:
1)創(chuàng)建電子書(shū)邏輯文件:概要文件、索引文件和內(nèi)容文件;
概要文件:至少包括:版本、作者、語(yǔ)言、書(shū)名、發(fā)行方、制作方信息;
索引文件:存儲(chǔ)預(yù)設(shè)的電子書(shū)邏輯劃分規(guī)則;
內(nèi)容文件:存儲(chǔ)電子書(shū)一個(gè)章節(jié)的內(nèi)容;
2)寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu);
a:獲取電子書(shū)的內(nèi)容信息,即獲取組成電子書(shū)的snbc類(lèi)文件的內(nèi)容也就是章節(jié)的內(nèi)容,根據(jù)需求先加密再壓縮書(shū)的內(nèi)容;
b:獲取電子書(shū)的索引信息,即獲取電子書(shū)的snbf類(lèi)文件內(nèi)容,包含書(shū)的概要信息 book.snbf,專(zhuān)題信息toc.snbf和章節(jié)列表信息toc_content.snbf;
c:按照一定的長(zhǎng)度將書(shū)的內(nèi)容信息和索引信息劃分成不同的段,該長(zhǎng)度的計(jì)算是根據(jù)存儲(chǔ)書(shū)內(nèi)容的字節(jié)大小計(jì)算的,假設(shè)內(nèi)容的字節(jié)大小是A則A除以64則得到該數(shù)值;
d:將是否加密標(biāo)示位寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第1~第4字節(jié);將壓縮算法的代號(hào)寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第5~第8字節(jié);該步驟構(gòu)建了SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的頭文件區(qū);
e:將分段規(guī)則寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第9~第12字節(jié);
將元數(shù)據(jù)數(shù)量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第13~第16字節(jié);
將元數(shù)據(jù)區(qū)在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第17~第20字節(jié);
將文件數(shù)量寫(xiě)入到SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第21~第24字節(jié);
將目錄區(qū)在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第25~第28字節(jié);
將壓縮目錄區(qū)占用空間寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第29~第32字節(jié);
將未壓縮內(nèi)容在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第33~第36字節(jié);
將壓縮內(nèi)容在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第37~第40字節(jié);
將附加信息區(qū)在內(nèi)容區(qū)的偏移量寫(xiě)入SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的第41~第44字節(jié);
該構(gòu)建SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的內(nèi)容控制區(qū);
f:從SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的45個(gè)字節(jié)開(kāi)始依次寫(xiě)入書(shū)的元數(shù)據(jù)信息,目錄區(qū)信息,未壓縮內(nèi)容信息,壓縮內(nèi)容信息和附加內(nèi)容信息;該步構(gòu)建了SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的內(nèi)容區(qū)。
一種所述SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的讀取方法,包括以下步驟:
a)解析SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的頭文件區(qū),根據(jù)第1~第4字節(jié)的數(shù)值判斷SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)是否加密,將讀取的四個(gè)字節(jié)數(shù)據(jù)轉(zhuǎn)換為字符,如果轉(zhuǎn)換后的字符為E則該SNB文件采用了加密方法否則該SNB文件內(nèi)容沒(méi)有加密;根據(jù)第5~第8字節(jié)的數(shù)值判斷SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的壓縮算法,將讀取的四個(gè)字節(jié)轉(zhuǎn)換為字符如果該字符為B則采用了BZIP2壓縮算法,如果是0則采用了GZIP壓縮算法;
b)解析SNB電子書(shū)存儲(chǔ)結(jié)構(gòu)的控制區(qū);
由第9~第12字節(jié)存儲(chǔ)的數(shù)值獲取分段規(guī)則;
由第13~第16字節(jié)存儲(chǔ)的數(shù)值獲取元數(shù)據(jù)數(shù)量;
由第17~第20字節(jié)存儲(chǔ)的數(shù)值獲取元數(shù)據(jù)區(qū)在內(nèi)容區(qū)的偏移量;
由第21~第24字節(jié)存儲(chǔ)的數(shù)值獲取文件數(shù)量;
由第25~第28字節(jié)存儲(chǔ)的數(shù)值獲取目錄區(qū)在內(nèi)容區(qū)的偏移量;
由第29~第32字節(jié)存儲(chǔ)的數(shù)值獲取壓縮目錄區(qū)占用空間;
由第33~第36字節(jié)存儲(chǔ)的數(shù)值獲取未壓縮內(nèi)容在內(nèi)容區(qū)的偏移量;
由第37~第40字節(jié)存儲(chǔ)的數(shù)值獲取壓縮內(nèi)容在內(nèi)容區(qū)的偏移量;
由第41~第44字節(jié)存儲(chǔ)的數(shù)值獲取附加信息區(qū)在內(nèi)容區(qū)的偏移量;
c)解析元數(shù)據(jù),元數(shù)據(jù)的占用空間存儲(chǔ)在內(nèi)容控制區(qū)的第17~第20字節(jié)中,獲取內(nèi)容控制區(qū)第17~第20字節(jié)的數(shù)值O,則從第45字節(jié)~45+O字節(jié)為元數(shù)據(jù)區(qū);元數(shù)據(jù)區(qū)的格式為長(zhǎng)度+內(nèi)容,先獲取元數(shù)據(jù)區(qū)的第1~第4字節(jié),然后根據(jù)該4個(gè)字節(jié)的數(shù)值大小獲取元數(shù)據(jù)的內(nèi)容,重復(fù)該步驟得到多個(gè)元數(shù)據(jù);
d)解析目錄區(qū),目錄區(qū)在內(nèi)容區(qū)的偏移量存儲(chǔ)在內(nèi)容控制區(qū)的第25~第28字節(jié)中,獲取內(nèi)容控制區(qū)第25~第28字節(jié)的數(shù)值P,則從第45+O字節(jié)~第45+O+P字節(jié)為目錄區(qū);
如果目錄區(qū)大小和壓縮目錄區(qū)大小不一致則根據(jù)第5~第8字節(jié)存儲(chǔ)的壓縮算法來(lái)解壓縮目錄區(qū)。
e)解析內(nèi)容區(qū);
解析未壓縮內(nèi)容區(qū),獲取內(nèi)容控制區(qū)第33~第36字節(jié)的數(shù)值Q,則第45+O+P字節(jié)~第45+O+P+Q字節(jié)為未壓縮內(nèi)容區(qū),讀取該部分得到未壓縮內(nèi)容,然后根據(jù)第9~第12字節(jié)存儲(chǔ)的分段規(guī)則拆分成多個(gè)章節(jié);
解析壓縮內(nèi)容區(qū),獲取內(nèi)容控制區(qū)第37~第40字節(jié)的數(shù)值R,則第45+O+P+Q字節(jié)~第45+O+P+Q+R字節(jié)為壓縮內(nèi)容區(qū),根據(jù)頭文件存儲(chǔ)的壓縮算法代號(hào)找出相應(yīng)的解壓縮算法解壓縮該部分內(nèi)容;
解析附加信息區(qū),獲取內(nèi)容控制區(qū)第41~第44字節(jié)的數(shù)值S,第45+O+P+Q+R字節(jié)~第45+O+P+Q+R+S字節(jié)為附加信息區(qū);獲取該部分字節(jié)記載的加密方法、秘鑰長(zhǎng)度;以及加密的段序號(hào)解密對(duì)應(yīng)的段內(nèi)容,根據(jù)分段規(guī)則拆分為章節(jié)。
以上通過(guò)具體實(shí)施方式和實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,但這些并非構(gòu)成對(duì)本發(fā)明的限制。在不脫離本發(fā)明原理的情況下,本領(lǐng)域的技術(shù)人員還可做出許多變形和改 進(jìn),這些也應(yīng)視為本發(fā)明的保護(hù)范圍。