專(zhuān)利名稱(chēng):基于鍵-值對(duì)格式的通信設(shè)備配置文件的生成和導(dǎo)入方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,包括以太網(wǎng)交換機(jī)、EPON (以太網(wǎng)無(wú)源光網(wǎng)絡(luò))系統(tǒng)、GPON(吉比特?zé)o源光網(wǎng)絡(luò))系統(tǒng)、EOC (同軸電纜以太網(wǎng))系統(tǒng),特別涉及通信設(shè)備生成、導(dǎo)入配置文件的方法。
背景技術(shù):
在通信系統(tǒng)中,由于通信設(shè)備運(yùn)行和管理的需要,在對(duì)通信設(shè)備配置完畢之后,需要將配置信息生成配置文件保存到非易失性存儲(chǔ)器中。如果通信設(shè)備意外重啟,則可以加載非易失性存儲(chǔ)器中的配置文件,恢復(fù)掉電之前的配置信息,從而正常工作??梢?jiàn),配置文件的保存、加載是通信設(shè)備必須具備的基本功能。通信設(shè)備的配置項(xiàng)很多,現(xiàn)有的通信設(shè)備配置一般都是基于CLI (命令行)的腳本文件來(lái)實(shí)現(xiàn)的。配置的具體步驟如下
1)用戶(hù)通過(guò)串ロ或Telnet登錄通信設(shè)備,通過(guò)CLI修改通信設(shè)備ー個(gè)或多個(gè)配置項(xiàng);
2)CLI解析模塊通過(guò)解析命令行參數(shù),調(diào)用對(duì)應(yīng)的底層接ロ,執(zhí)行配置;
3)保存CLI命令,形成腳本配置文件,并保存到非易失存儲(chǔ)器中;
如果通信設(shè)備掉電重啟吋,將會(huì)從非易失存儲(chǔ)器加載CLI腳本文件,并依次從腳本文件中取出每條CLI命令并執(zhí)行,恢復(fù)到掉電之前的狀態(tài)。采用上述這種保存配置的方式,有如下缺點(diǎn)
1)設(shè)備必須實(shí)行CLI配置方式,否則無(wú)法解析、下發(fā)CLI格式的配置文件;
2)CLI改動(dòng)之后,配置保存相關(guān)的代碼也必須做相應(yīng)調(diào)整,效率較低;
3)通信設(shè)備實(shí)現(xiàn)配置保存相關(guān)的代碼與其CLI命令完全配套,不同通信設(shè)備之間配置保存模塊的代碼無(wú)法復(fù)用;
基于鍵-值對(duì)格式文本配置方法的相應(yīng)優(yōu)點(diǎn)
O目前集中網(wǎng)管的趨勢(shì)越來(lái)越明顯,開(kāi)發(fā)CLI的必要性有所降低,可以酌情不實(shí)現(xiàn)
CLI。如果用Key-Value格式來(lái)實(shí)現(xiàn),配置文件模塊就不依賴(lài)于CLI模塊,CLI可以不實(shí)現(xiàn),或者晚實(shí)現(xiàn);
2)在實(shí)現(xiàn)了CLI的情況下,即使CLI發(fā)生了改動(dòng),配置保存、下發(fā)相關(guān)的代碼不需要做任何改動(dòng),效率較高;
3)基于Key-Value格式的配置文件模塊,可以復(fù)用于不同通信設(shè)備上;
4)配置高效和快速的生成和導(dǎo)入;
高效的哈希查找算法,決定了配置修改過(guò)程的高效,快速的生成數(shù)據(jù)字典和導(dǎo)出數(shù)據(jù)字典保證了鍵-值對(duì)格式配置文本的快速導(dǎo)入和生成。、
非易失性存儲(chǔ)器上Key (鍵)-Value (值)格式的配置文件是指基于ASCII編碼的描述簡(jiǎn)單參數(shù)的文本文件。這些參數(shù)包括(字符型,整型,浮點(diǎn)型,布爾型)。并且這種格式優(yōu)點(diǎn)是,結(jié)構(gòu)清晰,容易使用和修改。I.該配置文件一般被分為ー個(gè)或多個(gè)段落(Section),描述如下
[Section Namel]
每個(gè)段落的名字都在方括號(hào)里面,并且每個(gè)段落只能占據(jù)一行。節(jié)點(diǎn)的名字的組成可以是除方括號(hào)和換行符之外的所有字符。2.每個(gè)段落都可以含有ー個(gè)和多個(gè)字段,描述如下 Key=Value; comment
Key可以是任何字符(可以含有空格),在等號(hào)右側(cè)的Value可以是任何字符。Value可能被包含雙弓I號(hào)之間,如果沒(méi)有雙弓I號(hào),Value的值被解析為等號(hào)之后和注釋之前的最后ー個(gè)非空格字符中間的所有字符。
發(fā)明內(nèi)容
本發(fā)明目的在于提供一種基于Key-Value格式的配置文件的生成和導(dǎo)入方法,本發(fā)明采用線(xiàn)性的存儲(chǔ)結(jié)構(gòu),高效的哈希查找算法,以及整合的安全高效操作方法(増加,修改,刪除),使得該方法能夠廣泛應(yīng)用于通信領(lǐng)域,提高通信系統(tǒng)的運(yùn)行效率和穩(wěn)定性。本發(fā)明所采用的技術(shù)方案是基于鍵-值對(duì)格式的通信設(shè)備配置文件的生成和導(dǎo)入方法,其包括Si)首先根據(jù)設(shè)備需求,將通信設(shè)備內(nèi)存中的設(shè)備配置數(shù)據(jù)結(jié)構(gòu)通過(guò)填充、保存內(nèi)存字典的方式輸出到鍵-值對(duì)格式的配置文件;S2)然后通過(guò)創(chuàng)建、填充內(nèi)存字典的方式,將鍵-值對(duì)格式的配置文件的數(shù)據(jù)讀取到通信設(shè)備內(nèi)存相應(yīng)的設(shè)備配置數(shù)據(jù)結(jié)構(gòu)中,并對(duì)其進(jìn)行配置。所述的方法,生成配置文件的方法包括以下步驟
511)根據(jù)設(shè)備配置段的個(gè)數(shù),在內(nèi)存中創(chuàng)建相應(yīng)容量的字典;
512)根據(jù)設(shè)備的配置項(xiàng),取出通信設(shè)備程序數(shù)據(jù)結(jié)構(gòu)中的配置信息,根據(jù)關(guān)鍵字依據(jù)哈希算法計(jì)算得到哈希值,并依次將關(guān)鍵字、屬性值和哈希值填充到內(nèi)存中的字典;
513)將內(nèi)存字典中的Key和Value字符串,以Key=Value的形式導(dǎo)入到文本文件中,生成特定配置對(duì)象的配置文件,并存儲(chǔ)到非易失性存儲(chǔ)器中,其中Key表示鍵,Value表示值;
514)釋放內(nèi)存中的字典。所述的方法,步驟Sll中字典格式包括字典的總的記錄條數(shù)、字典總存儲(chǔ)空間的大小、字典索引、字典索引對(duì)應(yīng)的屬性值、字典索引對(duì)應(yīng)的哈希值。所述的方法,步驟S12計(jì)算鍵索引的方法為通過(guò)哈希算法,計(jì)算每個(gè)不同Key字符串的哈希值,并保存到字典索引中;并且Key值采用“SectioiKKey”方式存儲(chǔ),其中Section表示段落。所述的方法,步驟S13生成配置文件的方法具體包括
5131)遍歷字典找到不含冒號(hào)的字段值的總個(gè)數(shù),得到整個(gè)字典的分段信息;
5132)如果段落數(shù)目為0,直接返回空;
5133)如果段落數(shù)目不為0,從第一個(gè)段落開(kāi)始,取出段落的名稱(chēng)和它所占的字節(jié)數(shù),以“ [Section] ”格式輸出到文本一行;5134)以段落名次為關(guān)鍵字依次搜索字典,將含有相同段落名的Key取出Value的值,去掉Key中的“Section ”,并以“Key=Value”的格式輸出的文本中的一行;
5135)重復(fù)S133和S134,直到將字典中每個(gè)段落及段落所包含的內(nèi)容全部輸出為止。所述的方法,導(dǎo)入Key-Value格式配置文件的方法包括
521)根據(jù)設(shè)備配置段的個(gè)數(shù),在內(nèi)存中創(chuàng)建相應(yīng)容量的字典;
522)讀取非易失性存儲(chǔ)器上Key-Value格式的配置文件,逐行解析,填充到內(nèi)存字典
中; 523)根據(jù)通信設(shè)備的需要,對(duì)字典進(jìn)行操作;
524)逐條讀取內(nèi)存字典中的設(shè)備配置信息,發(fā)送到通信設(shè)備內(nèi)存相應(yīng)的設(shè)備配置數(shù)據(jù)結(jié)構(gòu)中,并對(duì)其進(jìn)行配置;
525)釋放字典。所述的方法,步驟S22逐行解析的方法包括
5221)以只讀的方式打開(kāi)在非易失性存儲(chǔ)器上的Key-Value格式的配置文件;
5222)從配置文件中讀取一行到內(nèi)存;
5223)計(jì)算這一行含有的字符串的長(zhǎng)度;
5224)查看字符串的結(jié)束符是否為換行符,如果不是則認(rèn)為一行的字符長(zhǎng)度超過(guò)了預(yù)定的內(nèi)存緩存大小,退出程序,否則繼續(xù);
5225)去掉行尾的換行符;
5226)判斷是否存在多行連接符,如果是則退出,否則繼續(xù);
5227)去掉行首和行尾的空格字符;
5228)重新計(jì)算去掉換行符和空格字符之后的字符串的長(zhǎng)度;
如果長(zhǎng)度小于0,則認(rèn)為此行為空行,跳到S222繼續(xù)執(zhí)行;
如果行首第一個(gè)字符為井號(hào)或分號(hào),則認(rèn)為此行為注釋行,跳到S222繼續(xù)執(zhí)行;
如果字符串的第一個(gè)字符是左方括號(hào),并且最后ー個(gè)字符為右方括號(hào),則將字符左方括號(hào)與右方括號(hào)之間的字符解析成段落的名稱(chēng),并將其取出來(lái);
5229)如果字符串中含有等號(hào),取出字符串中等號(hào)兩邊的值分別作為Key和Value; 等號(hào)右邊的值出現(xiàn)類(lèi)似如下面的情況
Key=
Key=;
Key=#
則取Value等于O ;
如果字符串中不含有等號(hào),解析為此行錯(cuò)誤,跳到S222繼續(xù)執(zhí)行;
S2210)從文本中解析的數(shù)據(jù),如果是段落名稱(chēng),填充字典索引=段落名稱(chēng),屬性值=0,然后通過(guò)哈希算法計(jì)算段落名稱(chēng)得到哈希值并填充;
如果取出的是Key和Value的值,填充字典索引=取出的Key值,屬性=取出的Value值,然后通過(guò)哈希算法計(jì)算Key的哈希值并填充。所述的方法,步驟S23的操作方法包括増加、刪除和修改。本方法流程清晰,算法高效,可擴(kuò)展性強(qiáng),適用范圍廣,可有效應(yīng)用于以太網(wǎng)交換機(jī)、EPON系統(tǒng)、GPON系統(tǒng)、EOC系統(tǒng)等應(yīng)用場(chǎng)景。因此,不必針對(duì)每套系統(tǒng)或者每個(gè)配置對(duì)象單獨(dú)設(shè)計(jì)ー種配置文件的生成和導(dǎo)入的方法,極大的減少代碼的開(kāi)發(fā)成本,提高了系統(tǒng)的可維護(hù)性和穩(wěn)定性。
圖I是基于Key-Value字典的基本結(jié)構(gòu)圖。圖2是導(dǎo)入設(shè)備配置文件流程圖。圖3生成設(shè)備配置文件流程圖。
具體實(shí)施方式
本發(fā)明提供一種基于Key-Value格式配置文件的生成和導(dǎo)入方法。將通信設(shè)備內(nèi)存中的設(shè)備配置數(shù)據(jù)結(jié)構(gòu)寫(xiě)入到Key-Value格式的字典中,然后將字典中的信息導(dǎo)出為配置文件并寫(xiě)入非易失性存儲(chǔ)器。在通信設(shè)備系統(tǒng)啟動(dòng)時(shí),將非易失性存儲(chǔ)器中的設(shè)備配置文件導(dǎo)入到Key-Value格式的字典中,然后將字典中的相關(guān)信息讀到內(nèi)存中相應(yīng)的設(shè)備配置數(shù)據(jù)結(jié)構(gòu)中并對(duì)相關(guān)設(shè)備進(jìn)行相應(yīng)配置。以下結(jié)合附圖,本發(fā)明結(jié)合配置文件的生成和導(dǎo)入的過(guò)程,說(shuō)明本發(fā)明的具體過(guò)程。根據(jù)操作類(lèi)型分為生成和導(dǎo)入兩個(gè)流程。一.生成配置文件
圖3給出了設(shè)備生成配置保存的流程,包括以下步驟
步驟I、根據(jù)設(shè)備配置段的個(gè)數(shù),在內(nèi)存中創(chuàng)建相應(yīng)容量的字典。系統(tǒng)默認(rèn)為每ー個(gè)字段創(chuàng)建能夠容納128條記錄的字典。內(nèi)存中字典的格式如圖I,分為五個(gè)部分;
1)字典的總的字段數(shù);
2)字典中每個(gè)字段所占存儲(chǔ)空間的大小,默認(rèn)為128;
3)字典中關(guān)鍵字對(duì)應(yīng)的屬性值;
4)字典中關(guān)鍵字;
5)字典中哈希指針;
字典是ー個(gè)Key和Value的關(guān)聯(lián)列表。每ー個(gè)關(guān)聯(lián)都由唯一的字Key標(biāo)識(shí)。當(dāng)在字典中按照Key查詢(xún)字符串Value時(shí),通過(guò)字典內(nèi)在的方法(基于無(wú)沖突的哈希算法)能夠快速查詢(xún)得到匹配的字符串(Value)。步驟2、根據(jù)設(shè)備的配置項(xiàng),如圖I所示,將系統(tǒng)應(yīng)用程序數(shù)據(jù)結(jié)構(gòu)中的配置信息依次填充到內(nèi)存中的字典,井根據(jù)哈希(Hash)算法,每個(gè)不同Key字符串,會(huì)計(jì)算得到不同的Value值,保存于字典中。并且Key值的存儲(chǔ)方式是“SectioiKKey”方式存儲(chǔ)的。Key的數(shù)據(jù)類(lèi)型只支持字符串(對(duì)大小寫(xiě)不敏感),Value的數(shù)據(jù)類(lèi)型支持整型、布爾型、浮點(diǎn)型、字符串。I)整型支持常用的不同進(jìn)制的表示方式(C語(yǔ)言語(yǔ)法規(guī)則)。例如,十進(jìn)制,八進(jìn)制(以O(shè)為起始位),十六進(jìn)制(以O(shè)x為起始位)。“42 ”->42
“042” ->34 (八進(jìn)制-> 十進(jìn)制)
“0x42” ->66 (十六進(jìn)制_>十進(jìn)制)2)布爾型支持的不僅是O和1,支持如下ー些在配置設(shè)備中常用的表達(dá)方式。滿(mǎn)足以下任何ー個(gè),會(huì)被解析為布爾型的真
①以字符 為起始位;
②以字符‘V為起始位;
③以字符‘t’為起始位;
④以字符‘τ’為起始位;
⑤以字符‘I’為起始位; 滿(mǎn)足以下任何ー個(gè),會(huì)被解析為布爾型的假
①以字符‘η’為起始位;
②以字符‘Ν’為起始位;
③以字符‘f’為起始位;
④以字符‘F’為起始位;
⑤以字符‘0’為起始位;
其中,Y或I是yes的首寫(xiě)字母,N或η是no的首寫(xiě)字母,T或t是true的首寫(xiě)字母,F(xiàn)或f是false的首寫(xiě)字母。3)浮點(diǎn)型支持雙精度浮點(diǎn)型,它的范圍在負(fù)數(shù)的時(shí)候是從-I. 79769313486232*10308 到-4· 94065645841247*1(Γ324,而正數(shù)的時(shí)候是從
4.94065645841247*10_324 到 I. 79769313486232*10·。4)字符串依據(jù)ASCII編碼的文本文件単行最大長(zhǎng)度,支持最大1024字節(jié)。步驟3、將內(nèi)存中字典中的Key和Value字符串,以Key=Value的形式導(dǎo)入到文本文件中,生成特定配置對(duì)象的配置文件,并保存到非易失性存儲(chǔ)器中。具體步驟如下
①遍歷字典找到不含冒號(hào)的字段值(即“Section”)的總個(gè)數(shù),整個(gè)字典分多少個(gè)段落(bection;;
②如果段落數(shù)目為0,直接返回空;
③如果段落數(shù)目不為0,從第一個(gè)段落(Section)開(kāi)始,取出段落的名稱(chēng)和它所占的字節(jié)數(shù),以[Section]格式輸出到文本一行;
④然后以段落名次為關(guān)鍵字依次搜索字典,將含有相同段落名的Key,并取出Value的值,去掉Key中的“Section ”,并以“Key=Value”的格式輸出的文本中的一行;
⑤重復(fù)③和④,直到將字典中每個(gè)段落及段落所包含的內(nèi)容全部輸出為止。步驟4、釋放內(nèi)存中的字典。ニ.導(dǎo)入配置文件
圖2給出了設(shè)備生成的配置文件導(dǎo)入的流程,包括以下步驟
步驟I、在內(nèi)存中創(chuàng)建字典,同生成配置文件步驟I ;
步驟2、讀非易失性存儲(chǔ)器上Key-Value格式的配置文件,逐行解析,填充到內(nèi)存字典
中;
具體的步驟如下
①以只讀的方式打開(kāi)在非易失性存儲(chǔ)器上的Key-Value格式的配置文件;
②從配置文件中讀取一行(1024字節(jié)長(zhǎng)度)到內(nèi)存;③計(jì)算這一行含有的字符串的長(zhǎng)度;
④查看字符串的結(jié)束符是否為換行符’\n’,如果不是則認(rèn)為一行的字符長(zhǎng)度超過(guò)了預(yù)定的內(nèi)存緩存大小,退出程序,否則繼續(xù);
⑤去掉行尾的換行符’\n’ ;
⑥判斷是否存在多行連接符’\\’,如果是,退出,否則繼續(xù);
⑦去掉行首和行尾的空格字符;
⑧重新計(jì)算去掉換行符和空格字符之后的字符串的長(zhǎng)度;
如果長(zhǎng)度小于O,則認(rèn)為此行為空行,跳到②繼續(xù)執(zhí)行;
如果行首第一個(gè)字符為’ 或’;’,則認(rèn)為此行為注釋行,跳到②繼續(xù)執(zhí)行;
如果字符串的第一個(gè)字符是’[’和最后ー個(gè)字符為’]’,則將字符’[’與’]’之間的字符解析成段落的名稱(chēng),并將其取出來(lái);
除以上幾種情況繼續(xù)下一歩;
⑨如果字符串中含有’=’取出字符串中’=’兩邊的值,
等號(hào)右邊的值出現(xiàn)類(lèi)似如下面的情況
Key=
Key=;
Key=#
取Value等于O ;
如果字符串中不含有’=’,解析為此行錯(cuò)誤,跳到②繼續(xù)執(zhí)行;
⑩從文本中解析的數(shù)據(jù)分為兩種類(lèi)型,ー種是段落名稱(chēng),另ー種是Key和Value的值; 如果是段落名稱(chēng),填充如圖I結(jié)構(gòu)體,索引=段落名稱(chēng),屬性值=0,通過(guò)哈希算法計(jì)算得
到Hash值并填充;
如果取出的是Key和Value的值,索引=取出的Key值,屬性=取出的Value值,通過(guò)哈希算法計(jì)算得到Hash值并填充;
步驟3、字典的操作(増加,刪除,修改);
字典的操作的基礎(chǔ)是查找,然后才是操作。字典的查找操作步驟如下
①根據(jù)索引計(jì)算得到哈希值;
②從字典的第一條記錄開(kāi)始查詢(xún);
③比較記錄的哈希值和上一步得到哈希值 如果不匹配,重復(fù)②;
如果匹配,繼續(xù)執(zhí)行;
④比較記錄的索引和需要查找的索引
⑤如果匹配,代表此記錄即要查找的記錄 不匹配,跳到②,直到最后一條記錄;
字典的増加操作,分為兩種情況,
①字典里有空位,按照如圖I結(jié)構(gòu)體填充即可;
②字典里沒(méi)有空位,將字典的容量擴(kuò)充一倍;
然后插入到第一個(gè)空位即可;字典的刪除操作,分為字典的刪除和字典里記錄的刪除,
①字典的刪除,從字典里第一條記錄開(kāi)始,依次釋放索引、屬性值、哈希值,直到最后ー條記錄,最后釋放字典對(duì)象;
②字典記錄的刪除,根據(jù)字典的查找操作,找到相應(yīng)的記錄,并釋放如圖I數(shù)據(jù)結(jié)構(gòu)里的索引值和屬性值,并將哈希值置為O ;
字典的修改操作,根據(jù)字典的查找操作,找到相應(yīng)的記錄,并修改如圖I數(shù)據(jù)結(jié)構(gòu)里的屬性值;
步驟4、逐條讀取內(nèi)存字典中的設(shè)備配置信息到內(nèi)存中相應(yīng)的設(shè)備配置數(shù)據(jù)結(jié)構(gòu)中并對(duì)相關(guān)設(shè)備進(jìn)行相應(yīng)配置;
步驟5、釋放字典。
三.哈希算法實(shí)現(xiàn)描述 /*
*功能簡(jiǎn)述根據(jù)給定的Key值計(jì)算哈希值.
*參數(shù) Key值 *返回值哈希值 */
unsigned dictionary_nash (,char 氺 key)
{
intIen;/*定義整型變量,存放Key值長(zhǎng)度*/
unsigned hash;/*定義無(wú)符號(hào)整型變量,存放哈希值*/
inti;/*定義循環(huán)變量*/
Ien = strlen (key) ;/*獲取Key值長(zhǎng)度,并存放于變量Ien中*/
for (hash=0, i=0 ; i〈len ; i++) /*從Key值的第一個(gè)字符開(kāi)始循環(huán),直到最
后一個(gè)字符*/
{
hash += (unsigned) key [i] ; /* 累加 Key 值 */
hash += (hash 10) ;/*將上ー步的結(jié)果左移10位與原值相加*/
hash '= (hash 6) ;/*將上ー步的結(jié)果右移6位與原值異或*/
}
hash += (hash〈〈3);/*將上ー步結(jié)果左移3位并原值相加*/
hash '= (hash 11) ;/*將上ー步結(jié)果右移11位與原值異或*/
hash += (hash 15) ;/*將上ー步結(jié)果左移12位與原值相加*/
return hash;/*返回上ー步結(jié)果即哈希值*/
} O
權(quán)利要求
1.基于鍵-值對(duì)格式的通信設(shè)備配置文件的生成和導(dǎo)入方法,其特征在于包括 51)將通信設(shè)備內(nèi)存中的配置信息數(shù)據(jù)結(jié)構(gòu)填充到內(nèi)存字典中,再將內(nèi)存字典輸出到鍵-值對(duì)格式的配置文件; 52)創(chuàng)建內(nèi)存字典,解析鍵-值對(duì)格式的配置文件并填充內(nèi)存字典,再將內(nèi)存字典中的數(shù)據(jù)設(shè)置到通信設(shè)備內(nèi)存中的配置信息數(shù)據(jù)結(jié)構(gòu),并對(duì)通信設(shè)備進(jìn)行配置。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,生成配置文件的方法包括以下步驟 511)根據(jù)設(shè)備配置段落的個(gè)數(shù),在內(nèi)存中創(chuàng)建相應(yīng)容量的字典; 512)根據(jù)設(shè)備的配置項(xiàng),取出通信設(shè)備程序數(shù)據(jù)結(jié)構(gòu)中的配置信息,根據(jù)關(guān)鍵字依據(jù)圖4算法計(jì)算得到哈希值,并依次將關(guān)鍵字、屬性值和哈希值填充到內(nèi)存字典中; 513)將內(nèi)存字典中的Key和Value字符串,以Key= Value的形式導(dǎo)入到文本文件中,生成特定配置對(duì)象的配置文件,并存儲(chǔ)到非易失性存儲(chǔ)器中,其中Key表示鍵,Value表示值; 514)釋放內(nèi)存中的字典。
3.根據(jù)權(quán)利要求2所述的方法,其特征在干步驟Sll中字典格式包括字典的總的記錄條數(shù)、字典總存儲(chǔ)空間的大小、字典索引、字典索引對(duì)應(yīng)的屬性值、字典索引對(duì)應(yīng)的哈希值。
4.根據(jù)權(quán)利要求3所述的方法,其特征在干,步驟S12計(jì)算鍵索引的方法為通過(guò)哈希算法,計(jì)算每個(gè)不同Key字符串的哈希值,并保存到字典索引中;并且Key值采用“Section:Key”方式存儲(chǔ),其中Section表示段落。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,步驟S13生成配置文件的方法具體包括 5131)遍歷字典,得到整個(gè)字典的段落的總個(gè)數(shù); 5132)如果段落數(shù)目為0,直接返回空; 5133)如果段落數(shù)目不為0,從第一個(gè)段落開(kāi)始,取出段落的名稱(chēng)和它所占的字節(jié)數(shù),以“ [Section] ”格式輸出到文本一行; 5134)以段落名次為關(guān)鍵字依次搜索字典,將含有相同段落名的Key取出Value的值,去掉Key中的“Section ”,并以“Key = Value”的格式輸出的文本中的一行; 5135)重復(fù)S133和S134,直到將字典中每個(gè)段落及段落所包含的內(nèi)容全部輸出為止。
6.根據(jù)權(quán)利要求5所述的方法,其特征在干,導(dǎo)入鍵-值對(duì)格式的配置文件的方法包括 521)根據(jù)設(shè)備配置段落的個(gè)數(shù),在內(nèi)存中創(chuàng)建相應(yīng)容量的字典; 522)讀取非易失性存儲(chǔ)器上Key-Value格式的配置文件,逐行解析,填充到內(nèi)存字典中; 523)根據(jù)通信設(shè)備的需要,對(duì)字典進(jìn)行操作; 524)逐條讀取內(nèi)存字典中的數(shù)據(jù),設(shè)置到通信設(shè)備內(nèi)存中的配置信息數(shù)據(jù)結(jié)構(gòu),并對(duì)通信設(shè)備進(jìn)行配置。; 525)釋放字典。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,步驟S22逐行解析的方法包括 5221)以只讀的方式打開(kāi)在非易失性存儲(chǔ)器上的Key-Value格式的配置文件; 5222)從配置文件中讀取一行到內(nèi)存;5223)計(jì)算這一行含有的字符串的長(zhǎng)度; 5224)查看字符串的結(jié)束符是否為換行符,如果不是則認(rèn)為一行的字符長(zhǎng)度超過(guò)了預(yù)定的內(nèi)存緩存大小,退出程序,否則繼續(xù);· 5225)去掉行尾的換行符; 5226)判斷是否存在多行連接符,如果是則退出,否則繼續(xù); 5227)去掉行首和行尾的空格字符; 5228)重新計(jì)算去掉換行符和空格字符之后的字符串的長(zhǎng)度; 如果長(zhǎng)度小于O,則認(rèn)為此行為空行,跳到S222繼續(xù)執(zhí)行; 如果行首第一個(gè)字符為井號(hào)或分號(hào),則認(rèn)為此行為注釋行,跳到S222繼續(xù)執(zhí)行;· 如果字符串的第一個(gè)字符是左方括號(hào),并且最后ー個(gè)字符為右方括號(hào),則將字符左方括號(hào)與右方括號(hào)之間的字符解析成段落的名稱(chēng),并將其取出來(lái); 5229)如果字符串中含有等號(hào),取出字符串中等號(hào)兩邊的值分別作為Key和Value; 等號(hào)右邊的值出現(xiàn)下面的情況Key = Key =;Key = # 則取Value等于O ; 如果字符串中不含有等號(hào),解析為此行錯(cuò)誤,跳到S222繼續(xù)執(zhí)行; S2210)從文本中解析的數(shù)據(jù),如果是段落名稱(chēng),填充字典索引=段落名稱(chēng),屬性值=O,然后通過(guò)哈希算法計(jì)算段落名稱(chēng)得到哈希值并填充; 如果取出的是Key和Value的值,填充字典索引=取出的Key值,屬性=取出的Value值,然后通過(guò)哈希算法計(jì)算Key的哈希值并填充。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于步驟S23的操作方法包括増加、刪除和修改。
全文摘要
本發(fā)明提供了一種基于鍵-值對(duì)格式的通信設(shè)備配置文件的生成和導(dǎo)入方法,其包括S1)將通信設(shè)備內(nèi)存中的配置信息數(shù)據(jù)結(jié)構(gòu)填充到內(nèi)存字典中,再將內(nèi)存字典輸出到鍵-值對(duì)格式的配置文件;S2)創(chuàng)建內(nèi)存字典,解析鍵-值對(duì)格式的配置文件并填充內(nèi)存字典,再將內(nèi)存字典中的數(shù)據(jù)設(shè)置到通信設(shè)備內(nèi)存中的配置信息數(shù)據(jù)結(jié)構(gòu),并對(duì)通信設(shè)備進(jìn)行配置。本方法能夠廣泛應(yīng)用于通信領(lǐng)域,提高通信系統(tǒng)的運(yùn)行效率和穩(wěn)定性。
文檔編號(hào)H04L12/24GK102662683SQ20111045922
公開(kāi)日2012年9月12日 申請(qǐng)日期2011年12月30日 優(yōu)先權(quán)日2011年12月30日
發(fā)明者吳雄偉, 張志虎, 王國(guó)峰, 肖虎濤 申請(qǐng)人:廣東東研網(wǎng)絡(luò)科技有限公司