一種軟件對應(yīng)配置文件的讀取方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及應(yīng)用軟件中配置文件的讀取,特別是一種軟件對應(yīng)配置文件的讀取方法和裝置。
【背景技術(shù)】
[0002]軟件中經(jīng)常會對配置文件進(jìn)行讀取。一個普通的配置文件常常包含多個節(jié),每個節(jié)中又有多個參數(shù),每個參數(shù)中包含了用戶所需要的最終數(shù)據(jù)。由于配置文件以文本方式存儲,因此存在如下不足:
1.配置文件接受“節(jié)名稱”和“參數(shù)名稱”來讀取。由于是文本文件,因此需要對此文本文件做全文的字符串匹配,用于查找“節(jié)名稱”和“參數(shù)名稱”,導(dǎo)致查找很多無關(guān)的信息,嚴(yán)重浪費(fèi)時間;例
2.在產(chǎn)品發(fā)布后,諸多重要信息是寫入在配置文件中的。這部分信息不希望被用戶知道,也不希望被用戶修改。而傳統(tǒng)的配置文件以明文形式存儲,用戶只要用文本編輯器打開后即可輕松的修改其中的內(nèi)容,容易導(dǎo)致以后讀取失敗,對軟件配置產(chǎn)生不良影響。
【發(fā)明內(nèi)容】
[0003]為解決上述問題,本發(fā)明的目的在于提供一種軟件對應(yīng)配置文件的讀取方法和裝置,加快配置文件的讀取速度,實(shí)現(xiàn)部分配置信息的隱藏。
[0004]本發(fā)明解決其問題所采用的技術(shù)方案是:
一種軟件對應(yīng)配置文件的讀取方法,包括:
配置文件編譯的步驟,在軟件發(fā)布前,將該軟件中以文本形式存在的普通配置文件編譯成編譯配置文件,所述編譯配置文件包括具有對應(yīng)關(guān)系的一個“節(jié)哈希表”和一個或多個“參數(shù)哈希表”,所述“節(jié)哈希表”由哈希表項(xiàng)組成,每個哈希表項(xiàng)保存普通配置文件中的一個節(jié),對應(yīng)的,每個普通配置文件中的一個節(jié)中的參數(shù)生成一個對應(yīng)的“參數(shù)哈希表”,該“參數(shù)哈希表”由哈希表項(xiàng)組成,每個哈希表項(xiàng)保存該普通配置文件中的對應(yīng)節(jié)下所包含的一個參數(shù);
配置文件讀取的步驟,判斷配置文件是普通配置文件或者是編譯配置文件,若是普通配置文件,則進(jìn)行正常讀取,否則,根據(jù)需要讀取的“節(jié)名稱”和“參數(shù)名稱”,分別對應(yīng)在“節(jié)哈希表”和“參數(shù)哈希表”查找對應(yīng)的節(jié)和參數(shù),并在找到參數(shù)時,返回該參數(shù)值。
[0005]優(yōu)選的,所述普通配置文件和編譯配置文件或存儲在軟件產(chǎn)品的不同目錄位置中,或以不同名稱命名。
[0006]優(yōu)選的,所述配置文件編譯的步驟具體為:
(31)讀取普通配置文件中的一個節(jié);
(32)讀取此節(jié)中的所有參數(shù);
(33)將此節(jié)中的所有“參數(shù)名稱”通過哈希算法得到所有參數(shù)名稱的哈希值;
(34)將“參數(shù)名稱”的哈希值和對應(yīng)參數(shù)的值作為表項(xiàng),保存到一個哈希表中,作為該節(jié)的“參數(shù)哈希表”;
(35循環(huán)以上步驟,直至讀取完普通配置文件中所有的節(jié),得到所有節(jié)對應(yīng)的“參數(shù)哈希表”;
(36)將普通配置文件中所有“節(jié)名稱”通過哈希算法得到所有節(jié)名稱的哈希值;
(37 )將每個節(jié)名稱的哈希值、對應(yīng)節(jié)所指向的“參數(shù)哈希表”的位置以及對應(yīng)節(jié)所指向的“參數(shù)哈希表”的大小作為一個表項(xiàng)存儲到另一個哈希表中,得到“節(jié)哈希表”;
(38)將所得到“節(jié)哈希表”和對應(yīng)“參數(shù)哈希表”依次寫入一個文件,作為編譯配置文件。
[0007]優(yōu)選的,配置文件讀取的步驟中,對編譯配置文件進(jìn)行讀取的具體步驟為:
(41)將“節(jié)名稱”以編譯時相同的哈希算法計(jì)算哈希值,得到“節(jié)名稱”的哈希值;
(42)在“節(jié)哈希表”中查找此哈希值對應(yīng)的表項(xiàng),若找不到,則進(jìn)入步驟(47),否則,進(jìn)入步驟(43);
(43)從找到的表項(xiàng)中讀取對應(yīng)“參數(shù)哈希表”的位置和大??;
(44)根據(jù)“參數(shù)哈希表”的位置和大小加載對應(yīng)的“參數(shù)哈希表”;
(45)將“參數(shù)名稱”以編譯時相同的哈希算法計(jì)算哈希值,得到“參數(shù)名稱”的哈希值;
(46)在“參數(shù)哈希表”中查找此哈希值對應(yīng)的表項(xiàng),若找不到,則進(jìn)入步驟(47),否則,將找到的表項(xiàng)中存儲的對應(yīng)的參數(shù)值返回;
(47)結(jié)束讀取過程。
[0008]一種軟件對應(yīng)配置文件的讀取裝置,包括:
配置文件編譯模塊,在軟件發(fā)布前,將該軟件中以文本形式存在的普通配置文件編譯成編譯配置文件,所述編譯配置文件包括具有對應(yīng)關(guān)系的一個“節(jié)哈希表”和一個或多個“參數(shù)哈希表”,所述“節(jié)哈希表”由哈希表項(xiàng)組成,每個哈希表項(xiàng)保存普通配置文件中的一個節(jié),對應(yīng)的,每個普通配置文件中的一個節(jié)中的參數(shù)生成一個對應(yīng)的“參數(shù)哈希表”,該“參數(shù)哈希表”由哈希表項(xiàng)組成,每個哈希表項(xiàng)保存該普通配置文件中的對應(yīng)節(jié)下所包含的一個參數(shù);
配置文件讀取模塊,判斷配置文件是普通配置文件或者是編譯配置文件,若是普通配置文件,則進(jìn)行正常讀取,否則,根據(jù)需要讀取的“節(jié)名稱”和“參數(shù)名稱”,分別對應(yīng)在“節(jié)哈希表”和“參數(shù)哈希表”查找對應(yīng)的節(jié)和參數(shù),并在找到參數(shù)時,返回該參數(shù)值。
[0009]優(yōu)選的,所述配置文件編譯模塊包括:
參數(shù)哈希表生成單元,用于循環(huán)讀取普通配置文件中的每一個節(jié)中的所有參數(shù),并將每一個節(jié)中的所有“參數(shù)名稱”通過哈希算法得到對應(yīng)的哈希值,同時,每一個節(jié)中“參數(shù)名稱”的哈希值和對應(yīng)參數(shù)的值作為表項(xiàng),保存到一個哈希表中,作為該節(jié)的“參數(shù)哈希表”;節(jié)哈希表生成單元,用于將普通配置文件中所有“節(jié)名稱”通過哈希算法得到所有節(jié)名稱的哈希值,并將每個節(jié)名稱的哈希值、對應(yīng)節(jié)所指向的“參數(shù)哈希表”的位置以及對應(yīng)節(jié)所指向的“參數(shù)哈希表”的大小作為一個表項(xiàng)存儲到另一個哈希表中,得到“節(jié)哈希表”;配置文件生成單元,用于將所得到“節(jié)哈希表”和對應(yīng)“參數(shù)哈希表”依次寫入一個文件,作為編譯配置文件。
[0010]優(yōu)選的,所述配置文件讀取模塊包括:
節(jié)名稱查找單元,用于將“節(jié)名稱”以編譯時相同的哈希算法計(jì)算哈希值,得到“節(jié)名稱”的哈希值,并根據(jù)該哈希值在“節(jié)哈希表”中查找此哈希值對應(yīng)的表項(xiàng);
參數(shù)哈希表加載單元,用于從節(jié)名稱查找單元所找到的表項(xiàng)中讀取對應(yīng)“參數(shù)哈希表”的位置和大小,根據(jù)“參數(shù)哈希表”的位置和大小加載對應(yīng)的“參數(shù)哈希表”;
參數(shù)查找單元,用于將“參數(shù)名稱”以編譯時相同的哈希算法計(jì)算哈希值,得到“參數(shù)名稱”的哈希值,并根據(jù)該哈希值在參數(shù)哈希表加載單元加載的“參數(shù)哈希表”中查找此哈希值對應(yīng)的表項(xiàng),同時,將找到的表項(xiàng)中存儲的對應(yīng)的參數(shù)值返回。
[0011]本發(fā)明的有益效果是:
本發(fā)明采用一種軟件對應(yīng)配置文件的讀取方法和裝置,對普通配置文件進(jìn)行了編譯,在讀取配置文件時,可極大地提高讀取速度;同時,采用編譯后的編譯配置文件,實(shí)現(xiàn)部分配置信息的隱藏,加大用戶對配置文件進(jìn)行修改的難度。
【附圖說明】
[0012]下面結(jié)合附圖和實(shí)例對本發(fā)明作進(jìn)一步說明。
[0013]圖1是本發(fā)明所述方法中將普通配置文件編譯為編譯配置文件的流程示意圖;
圖2是本發(fā)明讀取配置文件是的流程圖;
圖3是本發(fā)明所述方法讀取編譯配置文件的流程示意圖;
圖4是本發(fā)明所述編譯配置文件的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0014]軟件中的配置文件通常以文本形式存儲,配置文件接受“節(jié)名稱”和“參數(shù)名稱”來讀取。由于是文本文件,因此需要對此文本文件做全文的字符串匹配,用于查找“節(jié)名稱”和“參數(shù)名稱”。例如對于下面這個配置文件:
[Main]
StandardCanvasWidth=I280StandardCanvasHeight=960[MovieRecord]
Enable=O
Size=2
[Debug]
3DEngineDebugInfo=0
Console=O0
[0015]如果想讀取[Debug]這個節(jié)中的Console參數(shù)值,貝Ij需要將以上文本全部讀取出來,并通過字串比較的方法在讀取的文件找到相應(yīng)的字串,才能找到Console的實(shí)際值是O0 (若沒有讀取完[Main]和[MovieRecord]兩個節(jié),下面的所有字串是無法找到[Debug]的,因?yàn)槲谋疚募胁蛔x取完前面的字串是不知道[Debug]中的Size的位置的,而前面讀取的信息,卻對我們最終要查詢的信息沒有幫助只是浪費(fèi)1/0。)
為避免以上查找時間的浪費(fèi)和用戶對配置文件的修改,參照圖1和圖2所示,本發(fā)明提供了一種軟件對應(yīng)配置文件的讀取方法,包括:
配置文件編譯的步驟,在軟件發(fā)布前,將該軟件中以文本形式存在的普通配置文件編譯成編譯配置文件,所述編譯配置文件包括具有對應(yīng)關(guān)系的一個“節(jié)哈希表”和一個或多個“參數(shù)哈希表”,所述“節(jié)哈希表”由哈希表項(xiàng)組成,每個哈希表項(xiàng)保存普通配置文件中的一個節(jié),對應(yīng)的,每個普通配置文件中的一個節(jié)中的參數(shù)生成一個對應(yīng)的“參數(shù)哈希表”,該“參數(shù)哈希表”由哈希表項(xiàng)組成,每個哈希表項(xiàng)保存該普通配置文件中的對應(yīng)節(jié)下所包含的一個參數(shù);
配置文件讀取的步驟,判斷配置文件是普通配置文件或者是編譯配置文件,若是普通配置文件,則進(jìn)行正常讀取,否則,根據(jù)需要讀取的“節(jié)名稱”和“參數(shù)名稱”,分別對應(yīng)在“節(jié)哈希表”和“參數(shù)哈希表”查找對應(yīng)的節(jié)和參數(shù),并在找到參數(shù)時,返回該參數(shù)值。
[0016]參照圖1所示將普通配置文件編譯為編譯配置文件的流程示意圖,所述配置文件編譯的步驟具體為:
(31)讀取普通配置文件中的一個節(jié);
(32)讀取此節(jié)中的所有參數(shù);
(33)將此節(jié)中的所有“參數(shù)名稱”通過哈希算法得到所有參數(shù)名稱的哈希值;
(34)將“參數(shù)名稱”的哈希值和對應(yīng)參數(shù)的值作為表項(xiàng),保存到一個哈希表中,作為該節(jié)的“參數(shù)哈希表”;
(35循環(huán)以上步驟,直至讀取完普通配置文件中所有的節(jié),得到所有節(jié)對應(yīng)的“參數(shù)哈希表”;
(36)將普通配置文件中所有“節(jié)名稱”通過哈希算法得到所有節(jié)名稱的哈希值;
(37 )將每個節(jié)名稱的哈希值、對應(yīng)節(jié)所指向的“參數(shù)哈希表”的位置以及對應(yīng)節(jié)所指向的“參數(shù)哈希表”的大小作為一個表項(xiàng)存儲到另一個哈希表中,得到“節(jié)哈希表”;
(38)將所得到“節(jié)哈希表”和對應(yīng)“參數(shù)哈希表”依次寫入一個文件,作為編譯配置文件。
[0017]參照圖2所示,在對配置文件進(jìn)行讀取時,判斷配置文件是普通配置文件或者是編譯配置文件,若是普通配置文件,則進(jìn)行正常讀取,否則,根據(jù)需要讀取的“節(jié)名