亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

基于mbx格式的郵件正文的獲取方法及系統(tǒng)的制作方法

文檔序號(hào):6516946閱讀:420來源:國知局
基于mbx格式的郵件正文的獲取方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種基于mbx格式的郵件正文的獲取方法及系統(tǒng),其中的方法包括,將mbx格式的郵件映射到內(nèi)存;將映射到內(nèi)存的mbx格式的郵件的首行轉(zhuǎn)換成模式串,并將模式串的前六個(gè)字節(jié)作為模式子串;在映射到內(nèi)存的mbx格式的郵件除了第一行的其余行首部位置添加一個(gè)標(biāo)志;將每行標(biāo)志后的六個(gè)字節(jié)形成數(shù)據(jù)塊映射到緩存上,并對多行的數(shù)據(jù)塊進(jìn)行分組;通過分段hash映射方法篩選出每組數(shù)據(jù)塊中的模式子串,并記錄模式子串的位置;再通過查找標(biāo)志確定及記錄空行的位置;最后,通過匹配空行的位置和模式子串的位置確定郵件正文的位置,并獲取郵件正文。通過本發(fā)明,在獲取郵件正文時(shí)能夠減少頻繁訪問磁盤帶來的損耗,并且能夠節(jié)省獲取郵件正文的時(shí)間。
【專利說明】基于mbx格式的郵件正文的獲取方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)通信【技術(shù)領(lǐng)域】,更為具體地,涉及一種基于mbx格式的郵件正文的獲取方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著社會(huì)的進(jìn)步和技術(shù)的發(fā)展,電子郵件已經(jīng)成為人們工作中主要的通信手段。如今互聯(lián)網(wǎng)上對于郵件正文的獲取與過濾,扮演著防止數(shù)據(jù)泄露與攔截垃圾郵件等重要角色,越來越受到網(wǎng)絡(luò)管理者的關(guān)注與重視,對于海量的mbx格式郵件正文的提取,直接為不同操作系統(tǒng)的防止數(shù)據(jù)泄露與垃圾郵件過濾等提供重要的原材料,在整個(gè)網(wǎng)絡(luò)防護(hù)系統(tǒng)中起到提取關(guān)鍵信息的預(yù)處理作用,同時(shí)其性能直接影響到整個(gè)防護(hù)系統(tǒng)乃至整個(gè)網(wǎng)絡(luò)拓?fù)涞耐掏铝俊?br> [0003]在當(dāng)前郵件正文的提取方法中,mbx格式的郵件因存儲(chǔ)多封郵件,處理起來會(huì)消耗很多時(shí)間,當(dāng)防火墻或網(wǎng)上的服務(wù)器需要處理大量mbx格式的郵件數(shù)據(jù)庫時(shí),獲取郵件正文的時(shí)間消耗會(huì)與郵件大小成正比例增加,在獲取郵件正文的過程中,需要對郵件的頭部特征進(jìn)行搜索與定位,而傳統(tǒng)的特征搜索算法無論是多模還是單模,都需要對郵件內(nèi)容進(jìn)行反復(fù)地遍歷,以致消耗很多的時(shí)間;同時(shí),頻繁地訪問磁盤也對系統(tǒng)的性能帶來極大的損耗,延長了海量mbx格式郵件正文提取的時(shí)間。

【發(fā)明內(nèi)容】

[0004]鑒于上述問題,本發(fā)明的目的是提供一種基于mbx格式的郵件正文的獲取方法及系統(tǒng),以解決在提取mbx格式郵件正文的過程中,頻繁訪問磁盤造成系統(tǒng)性能損耗的問題,提高提取mbx格式郵件正文的效率。
[0005]本發(fā)明提供一種基于mbx格式的郵件正文的獲取方法,包括:
[0006]將mbx格式的郵件批量映射到內(nèi)存;將批量映射到內(nèi)存的mbx格式的郵件的首行轉(zhuǎn)換成模式串,并將模式串的前六個(gè)字節(jié)作為模式子串,在批量映射到內(nèi)存的mbx格式的郵件除首行之外的其余行的首部位置添加標(biāo)志;
[0007]將每行標(biāo)志后的六個(gè)字節(jié)形成數(shù)據(jù)塊映射到緩存上,然后對數(shù)據(jù)塊進(jìn)行分組,篩選出每組數(shù)據(jù)塊中的模式子串,并記錄模式子串的位置;并且,通過查找每行首部位置的標(biāo)志確定并記錄空行的位置;
[0008]通過匹配空行的位置和模式子串的位置確定郵件正文的位置;
[0009]根據(jù)所確定的郵件正文的位置獲取郵件正文。
[0010]本發(fā)明還提供一種基于mbx格式的郵件正文的獲取系統(tǒng),包括:
[0011]郵件映射單元,用于將mbx格式的郵件批量映射到內(nèi)存;
[0012]模式串轉(zhuǎn)換單元,用于將批量映射到內(nèi)存的mbx格式的郵件的首行轉(zhuǎn)換成模式串;
[0013]模式子串生成單元,用于將模式串的前六個(gè)字節(jié)作為模式子串;[0014]標(biāo)志添加單元,用于在批量映射到內(nèi)存的mbx格式的郵件除首行之外的其余行的首部位置添加標(biāo)志;
[0015]數(shù)據(jù)塊映射單元,用于將每行標(biāo)志后的六個(gè)字節(jié)形成數(shù)據(jù)塊映射到緩存上;
[0016]數(shù)據(jù)塊分組單元,用于對映射到緩存上的數(shù)據(jù)塊進(jìn)行分組;
[0017]模式子串篩選單元,用于篩選出每組數(shù)據(jù)塊中的模式子串;
[0018]模式子串記錄單元,用于記錄篩選出的模式子串的位置;
[0019]空行位置確定單元,用于通過查找標(biāo)志確定空行的位置;
[0020]空行位置記錄單元,用于記錄確定出的空行的位置;
[0021]郵件正文確定單元,用于通過匹配空行的位置和模式子串的位置確定郵件正文的位置;
[0022]郵件正文獲取單元,用于根據(jù)所確定的郵件正文的位置獲取郵件正文。
[0023]利用上述根據(jù)本發(fā)明提供的基于mbx格式的郵件正文的獲取方法及系統(tǒng),通過批量地將郵件數(shù)據(jù)映射到內(nèi)存,來減少頻繁訪問磁盤帶來的損耗,通過跨行匹配、與在緩存上進(jìn)行的跨數(shù)據(jù)塊匹配,極大地降低復(fù)雜模式串的匹配幾率,根據(jù)mbx格式特征實(shí)時(shí)地調(diào)節(jié)數(shù)據(jù)塊尺度,從而提升模式子串預(yù)匹配的性能,而且本發(fā)明采用的分段hash映射方法,第一段的hash查詢與第二段的精確過濾相結(jié)合,將沖突發(fā)生的概率降到百萬分之一,由于模式匹配過程的性能提升,帶來整體郵件正文提取性能的提升。
[0024]為了實(shí)現(xiàn)上述以及相關(guān)目的,本發(fā)明的一個(gè)或多個(gè)方面包括后面將詳細(xì)說明并在權(quán)利要求中特別指出的特征。下面的說明以及附圖詳細(xì)說明了本發(fā)明的某些示例性方面。然而,這些方面指示的僅僅是可使用本發(fā)明的原理的各種方式中的一些方式。此外,本發(fā)明旨在包括所有這些方面以及它們的等同物。
【專利附圖】

【附圖說明】
[0025]通過參考以下結(jié)合附圖的說明及權(quán)利要求書的內(nèi)容,并且隨著對本發(fā)明的更全面理解,本發(fā)明的其它目的及結(jié)果將更加明白及易于理解。在附圖中:
[0026]圖1為mbx格式郵件的結(jié)構(gòu)圖;
[0027]圖2為根據(jù)本發(fā)明的基于mbx格式的郵件正文的獲取方法的流程圖;
[0028]圖3為根據(jù)本發(fā)明實(shí)施例的基于mbx格式的郵件正文的獲取方法的流程圖;
[0029]圖4為根據(jù)本發(fā)明實(shí)施例每次分組的行數(shù)調(diào)節(jié)示意圖;
[0030]圖5為根據(jù)本發(fā)明實(shí)施例的hash表映射示意圖;
[0031]圖6為本發(fā)明實(shí)施例的跨行匹配示意圖;
[0032]圖7為根據(jù)本發(fā)明的基于mbx格式的郵件正文的獲取系統(tǒng)的結(jié)構(gòu)框圖。
[0033]在所有附圖中相同的標(biāo)號(hào)指示相似或相應(yīng)的特征或功能。
【具體實(shí)施方式】
[0034]在下面的描述中,出于說明的目的,為了提供對一個(gè)或多個(gè)實(shí)施例的全面理解,闡述了許多具體細(xì)節(jié)。然而,很明顯,也可以在沒有這些具體細(xì)節(jié)的情況下實(shí)現(xiàn)這些實(shí)施例。在其它例子中,為了便于描述一個(gè)或多個(gè)實(shí)施例,公知的結(jié)構(gòu)和設(shè)備以方框圖的形式示出。
[0035]為了詳細(xì)清楚的描述本發(fā)明提供的基于mbx格式的郵件正文的獲取方法及系統(tǒng),下面首先對mbx格式的郵件結(jié)構(gòu)進(jìn)行說明。
[0036]mbx郵件格式是一種MAC/Unix系統(tǒng)下的郵件存儲(chǔ)格式,其內(nèi)容由消息分隔符、消息頭部、空行、消息正文組成,具有明顯特征,圖1示出了 mbx格式郵件的結(jié)構(gòu)。
[0037]如圖1所示,郵件第一行為消息分隔符由“FromO…”組成,郵件第二行到第十五行為消息頭部,消息頭部的下面是空行,空行下面是郵件正文,mbx郵件結(jié)構(gòu)是格式本身定義的,針對mbx格式郵件的結(jié)構(gòu),首先將消息分隔符轉(zhuǎn)換成模式串:
[0038]'From < * > {Sun, Mon, Tue, Wed, Thur, Fri, Sat} {Jan, Feb, Mar,
[0039]Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec} \ [\d+\] \ [\d+\] *\r
[0040]由于在非貪婪模式匹配下,可以準(zhǔn)確地確定每封郵件的開始,而距離該模式串最近的空行則可以表示郵件正文的開始;下一封郵件的該模式串不但可以標(biāo)識(shí)下一封郵件的開始,同時(shí)也可以標(biāo)識(shí)上一封郵件正文的結(jié)束。因此,我們在數(shù)據(jù)流中,通過模式匹配該模式串及空行來確定郵件正文的位置。
[0041]然而,執(zhí)行上述復(fù)雜模式串的精確匹配,同時(shí)頻繁地訪問磁盤文件,會(huì)給性能帶來極大的損耗。所以,本文通過批量地將郵件數(shù)據(jù)映射到內(nèi)存,來減少頻繁訪問磁盤帶來的損耗。
[0042]本發(fā)明具體的思路是:先通過批量的內(nèi)存映射文件降低訪問磁盤文件的性能損耗,根據(jù)mbx格式特征設(shè)計(jì)模式串的跨行搜索匹配方法,通過對比目標(biāo)串與待匹配串在緩存中的hash表來實(shí)現(xiàn)預(yù)過濾,再采用逆向bloom filter思想實(shí)現(xiàn)模式串的跨數(shù)據(jù)塊(本發(fā)明將映射到緩存上的多行數(shù)據(jù)稱為數(shù)據(jù)塊)匹配,從而確定郵件正文的位置,極大地提高郵件正文提取的效率。
[0043]圖2示出了根據(jù)本發(fā)明的基于mbx格式的郵件正文的獲取方法的流程。
[0044]如圖2所示,在基于mbx格式的郵件正文的獲取過程中,首先,將mbx格式的郵件批量映射到內(nèi)存(步驟S200);然后,將批量映射到內(nèi)存的mbx格式的郵件的首行轉(zhuǎn)換成模式串,并將模式串的前六個(gè)字節(jié)作為模式子串,在批量映射到內(nèi)存的mbx格式的郵件除首行之外的其余行的首部位置添加標(biāo)志;將每行標(biāo)志后的六個(gè)字節(jié)形成數(shù)據(jù)塊映射到緩存上,然后對數(shù)據(jù)塊進(jìn)行分組,篩選出每組數(shù)據(jù)塊中的模式子串,并記錄模式子串的位置;并且,通過查找每行首部位置的標(biāo)志確定并記錄空行的位置(步驟S201);接著,通過匹配空行的位置和模式子串的位置確定郵件正文的位置(步驟S202);最后,根據(jù)所確定的郵件正文的位置獲取郵件正文(步驟S203)。
[0045]為了更為詳細(xì)地說明本發(fā)明提供的基于mbx格式的郵件正文的獲取方法,圖3示出了根據(jù)本發(fā)明實(shí)施例的基于mbx格式的郵件正文的獲取方法的流程。
[0046]如圖3所示,本發(fā)明提供的基于mbx格式的郵件正文的獲取方法的流程,包括:
[0047]S300:將mbx格式的郵件數(shù)據(jù)批量映射到內(nèi)存。
[0048]為了減少處理mbx格式的郵件時(shí)訪問磁盤的次數(shù),先將mbx格式的郵件數(shù)據(jù)批量映射到內(nèi)存中,同時(shí),對每次映射到內(nèi)存的文件大小進(jìn)行限制,通過讀取系統(tǒng)的內(nèi)存占用百分比來確定每次映射到內(nèi)存的文件大小,然后進(jìn)行內(nèi)存對齊,以提高內(nèi)存利用率,對于一封郵件分別在兩次內(nèi)存映射上的情況,將不完整的郵件緩存起來,等待下一次郵件數(shù)據(jù)映射到內(nèi)存使郵件完整后,再獲取郵件正文。
[0049]S301:添加并查找標(biāo)志“0A”。[0050]由于能夠表征郵件開始的消息分隔符可以被上述模式串表示,且該模式串都是在每行的開始(除去第一封郵件外,其他郵件的模式串都是在換行符“0A”之后)。因此,針對這種格式特征,在每個(gè)mbx郵件的開始添加一個(gè)標(biāo)志“0A”,使每個(gè)模式串“FromO…”都是在“0A”之后,由于對模式串的定位可以轉(zhuǎn)換為對模式子串“From〈”的定位,因此可以轉(zhuǎn)換為對全文搜索“0A”,對其位置進(jìn)行第一輪的篩選,使原來的逐個(gè)字節(jié)查找匹配轉(zhuǎn)換為逐行且只在每行的前六個(gè)字節(jié)查找匹配,這樣不但極大地縮小了查找的范圍,在海量郵件處理的時(shí)候加快了搜索速度,同時(shí)為后面的逐個(gè)數(shù)據(jù)塊查找奠定基礎(chǔ)。
[0051]由于每封郵件首行的模式串只有前六個(gè)字節(jié)相同即“From〈”,而從第七個(gè)字節(jié)開始不一定相同了,所以只能將每封郵件首行的模式串的前六個(gè)字節(jié)作為模式子串進(jìn)行篩選,如果每封郵件首行的模式子串不相同則不無法進(jìn)行篩選從而無法定位模式子串。
[0052]S302:記錄 “0A” 的位置 Position [i]。
[0053]需要說明的是,將每個(gè)“0A”的位置指針保存在Position[i]數(shù)組中是為了跨數(shù)據(jù)塊匹配提供方便。
[0054]S303:將“0A”及其后面的六個(gè)字節(jié)hash形成數(shù)據(jù)塊映射到緩存上。
[0055]需要說明的是,對于20K或32K的緩存我們只使用18K就夠了,因?yàn)槊看蝖ash映射到緩存上的數(shù)據(jù)行不超過3K。
[0056]S304:初始化數(shù)據(jù)塊行數(shù)。
[0057]由于每次數(shù)據(jù)hash映射到緩存上的最大行數(shù)可以達(dá)到3X 1024行,本實(shí)施例對這些行數(shù)進(jìn)行分組,圖4為`根據(jù)本發(fā)明實(shí)施例每次分組的行數(shù)調(diào)節(jié)示意圖。
[0058]如圖4所示,初始狀態(tài)可以設(shè)定數(shù)據(jù)塊每組的行數(shù)n=10行,之后映射到緩存上預(yù)匹配的數(shù)據(jù)塊每組的行數(shù)為平均郵件頭的長度,且初始計(jì)算的位置盡量定在郵件頭部開始的位置,因?yàn)檫@樣根據(jù)統(tǒng)計(jì)來的結(jié)果不斷調(diào)整每次分組的行數(shù),從而動(dòng)態(tài)地使能夠跳過的數(shù)據(jù)塊行數(shù)最大。
[0059]S305:計(jì)算n行“0A”后面六字節(jié)的hash值。
[0060]S306:查看Hash “From〈”是否屬于該集合,如果是,執(zhí)行步驟S307,如果否,執(zhí)行步驟S313。
[0061]這里運(yùn)用分段hash的方法,將模式子串“From〈”分成四字節(jié)的字母模式串“From”與一個(gè)兩字節(jié)的符號(hào)模式串“〈”,分別進(jìn)行hash值的計(jì)算,然后,對前四字節(jié)和后兩字節(jié)依次向左偏移八字節(jié),分別存儲(chǔ)在32位的hash值中,前四字節(jié)映射形成相應(yīng)的hash表1,后兩字節(jié)映射形成相應(yīng)的hash表2,映射公式如公式(2)所示,因此,前四字節(jié)偏移后計(jì)算出的hash值與前四字節(jié)未偏移計(jì)算出的hash值之間就存在著一一對應(yīng),其沖突發(fā)生概率為0 ;而對后兩字節(jié)的hash計(jì)算是非常均勻分布的,且其沖突符合小概率分布。
f hash ?8 + charAe [0,31
[0062]hash =彳《.(2)

I (hash ? 8) charAt{i) ^33,/ e [4,5]
[0063]其中,char At (i)表示的是數(shù)據(jù)串的第i個(gè)元素的ASCII碼值。
[0064]圖5為根據(jù)本發(fā)明實(shí)施例的hash表映射不意圖,hash表1和hash表2都是一維的表,如果想查詢Hash “From〈”是否屬于該集合,首先遍歷一維表1,判斷“From”偏移后計(jì)算出hash值是否在hash表1中,如果在,遍歷表2,判斷“〈”偏移后計(jì)算出hash值是否在hash表2中,如果在,說明該數(shù)據(jù)屬于這個(gè)集合;如果上述兩個(gè)步驟有一個(gè)判斷出否,則說明數(shù)據(jù)不屬于該集合。
[0065]其中,集合表示映射到緩存上的數(shù)據(jù)塊,判斷“From〈”(模式子串)是否屬于該集合就是判斷“From〈”是否在該數(shù)據(jù)塊內(nèi)。
[0066]S307:精確匹配“From〈”。
[0067]首先查詢前四字節(jié)的hash表1,如圖5所示,其時(shí)間復(fù)雜度為0(1),如果hash表I中的值與前四字節(jié)未移動(dòng)計(jì)算出的hash值相等,說明匹配上了字母模式串“From”,再查詢hash表2,如果hash表2中的值與后兩字節(jié)未移動(dòng)計(jì)算出的hash值相等,說明匹配上了符
號(hào)模式串“〈”。
[0068]上述步驟S305-S307為本發(fā)明匹配“From〈”優(yōu)選的方法,還可以采用其它方法進(jìn)行“From〈”的匹配,列舉如下方法:
[0069]方法一:
[0070]首先,將模式子串“From〈”與每個(gè)“0A”后面的六個(gè)字節(jié)分別計(jì)算hash值,hash函數(shù)采用三十二位的FNV算法;然后,用模式子串“From〈”的FNVhash值在截取的六字節(jié)數(shù)據(jù)的FNVhash值中進(jìn)行查找;如果找到,再采用C語言的字符串比較庫函數(shù)strcmpu與模式子串“From〈”的FNVhash值進(jìn)行比較,若相等即為匹配上“From〈”,否則繼續(xù)向前匹配。
[0071]方法二:
[0072]首先,將模式子串“From〈”與每個(gè)“0A”后面的六個(gè)字節(jié),每個(gè)字節(jié)都計(jì)算一個(gè)hash值,hash函數(shù)采用三十二位的FNV算法;然后,在緩存上將模式子串“From〈”的六個(gè)hash值,與每個(gè)“0A”后面的六個(gè)字節(jié)的hash值逐一進(jìn)行比較;若六個(gè)hash值都相等,則認(rèn)為匹配上“From〈”,否則繼續(xù)向前匹配。
[0073]方法三:
[0074]將模式子串“From〈”與每個(gè)“0A”后面的六個(gè)字節(jié),采用單個(gè)相互獨(dú)立的hash函數(shù)分別計(jì)算hash值(根據(jù)bloom filter理論,三個(gè)相互獨(dú)立的hash函數(shù)可以唯一確定一個(gè)值,不會(huì)有沖突);先比較“From〈”的第一個(gè)hash值與每個(gè)“0A”后面的六個(gè)字節(jié)的第一個(gè)hash值,若相等,則依次比較第二與第三個(gè)hash值,如果三個(gè)“From〈”的第一個(gè)hash值與一個(gè)“0A”后面的六個(gè)字節(jié)的三個(gè)hash值都相等,則認(rèn)為匹配上“From〈”否則繼續(xù)匹配。
[0075]方法四:
[0076]將模式子串“From〈”分為兩段“From”與“〈”,分別按位計(jì)算hash函數(shù);將每個(gè)“0A”后面的六個(gè)字節(jié),同比例地分為兩段,使用方法三同樣的hash函數(shù)計(jì)算其hash值;分別將兩部分hash值進(jìn)行比較,若兩部分的hash值都相等,則認(rèn)為匹配上“From〈”,否則繼續(xù)匹配;
[0077]上述例舉了幾個(gè)匹配模式子串的方法,但并不局限于只采用上述幾個(gè)方法進(jìn)行模式子串的匹配。
[0078]S308:非貪婪模式匹配消息分隔符的正則表達(dá)式,并記錄消息分隔符的位置eposition[j]。
[0079]需要說明的是,消息分隔符的正則表達(dá)式就是代替成消息分隔符的模式串,記錄消息分隔符的位置就是記錄模式串或模式子串的位置。
[0080]S309:查看hash “0A”是否屬于該集合,如果是,執(zhí)行步驟S310 ;如果否,執(zhí)行步驟S313。[0081]同理查看hash “From〈”是否屬于該集合的方法,將“0A”映射到緩存上形成hash表,如果在hash表中查詢到“0A”,說明該“0A”在所述集合中。
[0082]S310:在第一列字符中查找“0A”并記錄“0A”位置sposition [k]。
[0083]需要說明的是,查找并記錄“0A”的目的是記錄郵件中每一行開始的位置,因?yàn)槊恳恍虚_始的位置的前面必然是上一行結(jié)束的位置(文件的第一行除外),即“0A”的置,因此找到“0A”的位置后面就是下一行開始的位置。
[0084]S311:判斷 L=min{sposition[k+m]Isposition[k+m]>eposition[j]}和H=eposition [j+1]是否同時(shí)存在,如果是,則執(zhí)行步驟S312,如果否,則執(zhí)行步驟S313。
[0085]其中,L表不集合{sposition [k+m] I sposition [k+m] >eposition [j]}中最小的兀素,這里sposition [k+m]記錄的是空行的位置,即L表示距離上一次匹配上的消息分隔符位置最近的空行的位置;
[0086]需要說明的是,因?yàn)槊啃械慕Y(jié)束符是“0A”,在每行開始的位置添加一個(gè)標(biāo)志“0A”,所以空行是由兩個(gè)“0A”連在一起組成,在查找空行的過程中,先查找每行首部的“0A”,如果在“0A”后找到另一個(gè)“0A”,即兩個(gè)“0A”中間沒有字符串,則將兩個(gè)“0A”所在的行確定為空行,確定并記錄模式串的位置和確定并記錄空行的位置不分先后順序,可以先確定空行的位置,也可以先確定模式串的位置。
[0087]H表示下一個(gè)消息分隔符(相對于印osition[j]來說的下一個(gè)就是eposition [j+1])的位置。
[0088]為了更直觀的說明本實(shí)施例,圖6示出了本發(fā)明實(shí)施例的跨行匹配。
[0089]如圖6所示,由于將郵件數(shù)據(jù)每行(除了第一行)的前六個(gè)字節(jié)映射到緩存上,使原來的逐個(gè)字節(jié)查找匹配轉(zhuǎn)換為逐行且只在每行的前六個(gè)字節(jié)查找匹配,利用分段hash模式子串的方法篩選出模式子串,將模式串的定位轉(zhuǎn)換成模式子串的定位,再通過匹配模式子串和空行的位置來確定郵件正文的位置,所以在查找郵件正文的過程中可以跨過消息頭部,從而縮小查找的范圍,加快搜索速度。
[0090]S312:提取H與L之間的數(shù)據(jù)。
[0091]在步驟S311 中,如果 L=min {sposition [k+m] sposition [k+m] >eposition [ j]}和H=eposition[j+l]同時(shí)存在,則與消息分隔符位置最近的空行和消息分隔符之間的數(shù)據(jù)為郵件正文,在確定郵件正文的之后提取郵件正文。
[0092]S313:調(diào)整數(shù)據(jù)塊每組的行數(shù)n。
[0093]其中,n=min{sposition[k]-eposition[j]}&&n>0,這個(gè)集合表示的是消息頭部的最小長度,也就是消息頭部的平均長度。
[0094]通過計(jì)算郵件頭的長度來不斷調(diào)整每次預(yù)匹配的數(shù)據(jù)塊長度,實(shí)現(xiàn)數(shù)據(jù)塊最大限度的跨越,降低復(fù)雜模式串精確匹配的幾率,進(jìn)而提高整個(gè)搜索匹配的效率。
[0095]S314:判斷郵件數(shù)據(jù)是否到結(jié)尾,如果是,則執(zhí)行步驟S315 ;如果否,則執(zhí)行步驟S316。
[0096]S315:判斷郵件是否完整,如果是,則執(zhí)行步驟S312,如果否,則執(zhí)行步驟S317。
[0097]S316:根據(jù)poSition[i]數(shù)組中“0A”位置的指針跳過n行數(shù)據(jù),再次判斷郵件數(shù)據(jù)是否結(jié)尾,如果是則執(zhí)行步驟S315 ;如果否,則執(zhí)行步驟S305。
[0098]S317:緩存不完整的郵件,執(zhí)行步驟S300。[0099]需要說明的是,緩存不完整的郵件,等待下一次郵件數(shù)據(jù)映射到內(nèi)存使該郵件完整后,再提取郵件正文。
[0100]與上述方法相對應(yīng),本發(fā)明還提供一種基于mbx格式的郵件正文的獲取系統(tǒng)。圖7示出了根據(jù)本發(fā)明的基于mbx格式的郵件正文的獲取系統(tǒng)的邏輯結(jié)構(gòu)。
[0101]如圖7所示,本發(fā)明提供的基于mbx格式的郵件正文的獲取系統(tǒng)700包括郵件映射單元701、模式串轉(zhuǎn)換單元702、模式子串生成單元703、標(biāo)志添加單元704、數(shù)據(jù)塊映射單元705、數(shù)據(jù)塊分組單元706、模式子串篩選單元707、模式子串記錄單元708、空行位置確定單元709、空行位置記錄單元710、郵件正文確定單元711、郵件正文獲取單元712。
[0102]其中,郵件數(shù)據(jù)映射單元701用于將mbx格式的郵件映射到內(nèi)存;模式串轉(zhuǎn)換單元702用于將映射到內(nèi)存的mbx格式的郵件的首行轉(zhuǎn)換成模式串;模式子串生成單元703用于將模式串的前六個(gè)字節(jié)作為模式子串;標(biāo)志添加單元704用于在映射到內(nèi)存的mbx格式的郵件除了首行的其余行首部位置添加一個(gè)標(biāo)志;數(shù)據(jù)塊映射單元705用于將每行標(biāo)志后的六個(gè)字節(jié)形成數(shù)據(jù)塊映射到緩存上;數(shù)據(jù)塊分組單元706用于對多行的數(shù)據(jù)塊進(jìn)行分組;模式子串篩選單元707用于篩選出每組數(shù)據(jù)塊中的模式子串;模式子串記錄單元708用于記錄篩選出的模式子串的位置;空行位置確定單元709用于通過查找標(biāo)志確定空行的位置;空行位置記錄單元710用于記錄確定出的空行的位置;郵件正文確定單元711用于通過匹配空行的位置和模式子串的位置確定郵件正文的位置;郵件正文獲取單元712用于根據(jù)所確定的郵件正文的位置獲取郵件正文。
[0103]如上參照附圖以示例的方式描述了根據(jù)本發(fā)明的基于mbx格式的郵件正文的獲取方法及系統(tǒng)。但是,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,對于上述本發(fā)明所提出的基于mbx格式的郵件正文的獲取方法及系統(tǒng),還可以在不脫離本
【發(fā)明內(nèi)容】
的基礎(chǔ)上做出各種改進(jìn)。因此,本發(fā)明的保護(hù)范圍應(yīng)當(dāng)由所附的權(quán)利要求書的內(nèi)容確定。
【權(quán)利要求】
1.一種基于mbx格式的郵件正文的獲取方法,包括: 將mbx格式的郵件批量映射到內(nèi)存; 將批量映射到內(nèi)存的所述mbx格式的郵件的首行轉(zhuǎn)換成模式串,并將所述模式串的前六個(gè)字節(jié)作為模式子串,在批量映射到內(nèi)存的所述mbx格式的郵件除首行之外的其余行的首部位置添加標(biāo)志;將每行所述標(biāo)志后的六個(gè)字節(jié)形成數(shù)據(jù)塊映射到緩存上,然后對所述數(shù)據(jù)塊進(jìn)行分組,篩選出每組數(shù)據(jù)塊中的所述模式子串,并記錄所述模式子串的位置;并且,通過查找每行首部位置的所述標(biāo)志確定并記錄空行的位置; 通過匹配所述空行的位置和所述模式子串的位置確定郵件正文的位置; 根據(jù)所確定的郵件正文的位置獲取所述郵件正文。
2.如權(quán)利要求1所述的基于mbx格式的郵件正文的獲取方法,其中,在篩選每組數(shù)據(jù)塊中的所述模式子串的過程中, 將所述模式子串分成字母模式串和符號(hào)模式串,分別進(jìn)行hash值的計(jì)算; 對所述字母模式串和所述符號(hào)模式串依次向左偏移八字節(jié)計(jì)算hash值,分別存儲(chǔ)在字母模式串和符號(hào)模式串的hash表中,公式如下:
I hash ? 8 + charAt(i), i g [0,3]
hash - \
[(hash ? 8) charAi(i,)^33J.g [4,5] 其中,char At (i)表示模式子串的第i個(gè)元素的ASCII碼值;` 查詢字母模式串的hash表和查詢所述符號(hào)模式串的hash表;其中, 如果所述字母模式串未偏移計(jì)算出的hash值與所述字母模式串向左偏移八字節(jié)計(jì)算出的hash值相等,并且所述符號(hào)模式串未偏移計(jì)算出的hash值與所述符號(hào)模式串向左偏移八字節(jié)計(jì)算出的hash值相等,則模式子串匹配成功; 篩選出匹配成功的模式子串。
3.如權(quán)利要求1所述的基于mbx格式的郵件正文的獲取方法,其中,在對數(shù)據(jù)塊進(jìn)行分組的過程中, 第一組的行數(shù)為預(yù)設(shè)行數(shù),其余行數(shù)為平均郵件頭的長度。
4.如權(quán)利要求1所述的基于mbx格式的郵件正文的獲取方法,其中,在通過查找每行首部位置的所述標(biāo)志確定空行的位置的過程中, 如果在所述標(biāo)志后查找到換行符,則將與所述換行符所在的行確定為空行。
5.一種基于mbx格式的郵件正文的獲取系統(tǒng),包括: 郵件映射單元,用于將mbx格式的郵件批量映射到內(nèi)存; 模式串轉(zhuǎn)換單元,用于將批量映射到內(nèi)存的所述mbx格式的郵件的首行轉(zhuǎn)換成模式串; 模式子串生成單元,用于將所述模式串的前六個(gè)字節(jié)作為模式子串; 標(biāo)志添加單元,用于在批量映射到內(nèi)存的所述mbx格式的郵件除首行之外的其余行的首部位置添加標(biāo)志; 數(shù)據(jù)塊映射單元,用于將每行所述標(biāo)志后的六個(gè)字節(jié)形成數(shù)據(jù)塊映射到緩存上; 數(shù)據(jù)塊分組單元,用于對映射到緩存上的所述數(shù)據(jù)塊進(jìn)行分組; 模式子串篩選單元,用于篩選出每組數(shù)據(jù)塊中的所述模式子串;模式子串記錄單元,用于記錄篩選出的所述模式子串的位置; 空行位置確定單元,用于通過查找所述標(biāo)志確定空行的位置; 空行位置記錄單元,用于記錄確定出的空行的位置; 郵件正文確定單元,用于通過匹配所述空行的位置和所述模式子串的位置確定郵件正文的位置; 郵件正文獲取單元, 用于根據(jù)所確定的郵件正文的位置獲取所述郵件正文。
【文檔編號(hào)】G06F17/30GK103559244SQ201310521274
【公開日】2014年2月5日 申請日期:2013年10月28日 優(yōu)先權(quán)日:2013年10月28日
【發(fā)明者】吳子章, 劉申 申請人:東軟集團(tuán)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1