的編碼長度,復(fù)制表示與壓縮編碼對(duì)應(yīng)的字符、單詞的字符代碼??刂撇?41通過將由復(fù)制部143復(fù)制的字符代碼,配置于與由分配部142生成的壓縮編碼對(duì)應(yīng)的偏移位置,來生成解壓詞典D3??刂撇?41還將解壓詞典D3儲(chǔ)存至存儲(chǔ)部15。
[0071]通過壓縮部11以及生成部13進(jìn)行文件Fl的壓縮處理。圖5、圖6、圖7、圖9以及圖10示有壓縮處理的處理步驟。另外,通過解壓部12以及生成部14進(jìn)行壓縮文件F2的解壓處理。圖12、圖13以及圖14示有解壓處理的處理步驟。
[0072]圖5表示壓縮功能的處理步驟例。若調(diào)出壓縮功能,則控制部111執(zhí)行壓縮處理的預(yù)處理(S101)。壓縮功能的調(diào)出包含壓縮對(duì)象的文件Fl的指定。在SlOl的預(yù)處理中,控制部111確保存儲(chǔ)區(qū)域Al以及存儲(chǔ)區(qū)域A2,從存儲(chǔ)部15中加載單詞一覽表LI,并確保統(tǒng)計(jì)表Tl以及壓縮詞典D2的儲(chǔ)存區(qū)域。
[0073]若SlOl的處理結(jié)束,則控制部111將文件Fl加載至存儲(chǔ)區(qū)域Al (S102)。在文件Fl的尺寸比規(guī)定的尺寸大的情況下,控制部111對(duì)文件Fl進(jìn)行塊分割,按照每個(gè)分割所得的塊進(jìn)行以下的壓縮處理。接著,控制部111對(duì)生成部13進(jìn)行壓縮詞典D2的生成指示(S103)ο
[0074]圖6表示壓縮詞典生成的處理步驟例。若從控制部111接受壓縮詞典的生成指示,則控制部131使統(tǒng)計(jì)部132執(zhí)行文件Fl的統(tǒng)計(jì)處理(S201)。
[0075]圖7表示統(tǒng)計(jì)處理的處理步驟例。若通過控制部131接受統(tǒng)計(jì)處理的指示,則統(tǒng)計(jì)部132開始被加載至存儲(chǔ)區(qū)域Al的文件Fl統(tǒng)計(jì)處理。在統(tǒng)計(jì)處理的開始時(shí),讀出位置表示被加載至存儲(chǔ)區(qū)域Al的文件Fl的前端。統(tǒng)計(jì)部132從存儲(chǔ)區(qū)域Al的讀出位置獲取字符代碼(S301)。在S301的處理中,讀出位置前進(jìn)在S301中獲取的字符代碼的量。
[0076]接下來,統(tǒng)計(jì)部132判定在S301中獲取的字符代碼是否是劃分符號(hào)(S302)。S302的判定預(yù)先設(shè)定作為劃分符號(hào)處理的字符代碼,根據(jù)在S301中獲取的字符代碼是否與預(yù)先設(shè)定的字符代碼的任意一個(gè)相應(yīng)來進(jìn)行判斷。劃分符號(hào)例如是空格符號(hào)(在ASCII碼系統(tǒng)中是0x20)、感嘆號(hào)(在ASCII碼系統(tǒng)中是0x21)、逗號(hào)(在ASCII碼系統(tǒng)中是0x2C)、句號(hào)(在ASCII碼系統(tǒng)中是0x2E)、冒號(hào)(在ASCII碼系統(tǒng)中是0x3A)、分號(hào)(在ASCII碼系統(tǒng)中是0x3B)以及問號(hào)(在ASCII碼系統(tǒng)中是0x3F)等?;蛘?,S302的判定也可以根據(jù)在S301中獲取的字符代碼是否是預(yù)先決定的數(shù)值范圍內(nèi)(例如,0x20?0x3F)來進(jìn)行判斷。
[0077]在S301中獲取的字符代碼不是劃分符號(hào)的情況下(S302 否”),統(tǒng)計(jì)部132將在S301中獲取的字符代碼儲(chǔ)存至緩沖區(qū)(S303)。移至S303的處理結(jié)束的S309的步驟。
[0078]在S301中獲取的字符代碼是劃分符號(hào)的情況下(S302 是”),統(tǒng)計(jì)部132判定在S301中獲取的字符代碼是否是空格符號(hào)(S304)。作為一個(gè)例子,也可以在S302的判定之前進(jìn)行S304的判定。在該情況下,統(tǒng)計(jì)部132在不滿足S304的條件的情況下進(jìn)行S302的判定,若滿足S302的判定條件則移至S305的步驟,若不滿足S302的判定條件,則移至S303的步驟。
[0079]在S301中獲取的字符代碼不是空格符號(hào)的情況下(S304 否”),統(tǒng)計(jì)部132進(jìn)行單詞的計(jì)數(shù)處理(S305)。S卩,統(tǒng)計(jì)部132對(duì)于連接有緩沖區(qū)所儲(chǔ)存的字符代碼(或者字符代碼串)和在S301中最近獲取的字符代碼字符串,使被儲(chǔ)存于統(tǒng)計(jì)表Tl的出現(xiàn)次數(shù)自加1在S305的處理中,在統(tǒng)計(jì)表Tl內(nèi)不存在對(duì)應(yīng)的字符串的情況下,對(duì)于緩沖區(qū)內(nèi)的字符代碼以及在S301中最近獲取的字符代碼的每一個(gè),使統(tǒng)計(jì)表Tl內(nèi)的出現(xiàn)次數(shù)自加I。
[0080]圖8表示統(tǒng)計(jì)表Tl的例子。在統(tǒng)計(jì)表Tl中,對(duì)字符、數(shù)字等各符號(hào)、單詞一覽表LI所包含的各單詞、以及控制符號(hào)和各劃分符號(hào)的組合的每一個(gè),儲(chǔ)存出現(xiàn)次數(shù)。
[0081]作為使用了統(tǒng)計(jì)表Tl的統(tǒng)計(jì)處理的另外一個(gè)例子,統(tǒng)計(jì)部132也可以將滿足S302的判定條件從而被劃分的字符串作為單詞登錄至統(tǒng)計(jì)表Tl。在該另外一個(gè)例子中,在統(tǒng)計(jì)表Tl內(nèi)不存在對(duì)應(yīng)的字符串的情況下,統(tǒng)計(jì)部132將字符串作為單詞重新登錄至統(tǒng)計(jì)表Tl。由此抑制對(duì)單詞一覽表LI內(nèi)包含、文件Fl內(nèi)未包含的單詞分配壓縮編碼。另外,對(duì)單詞一覽表LI未包含、文件Fl內(nèi)包含的單詞也分配壓縮編碼。另外,抑制對(duì)單詞一覽表LI包含、文件Fl內(nèi)未包含的單詞,也登錄至統(tǒng)計(jì)表Tl從而占據(jù)存儲(chǔ)區(qū)域。
[0082]若結(jié)束S305的處理,則統(tǒng)計(jì)部132進(jìn)行控制符號(hào)以及劃分符號(hào)的組合的計(jì)數(shù)(S306)。在S306中,使取消空格符號(hào)的意思的控制符號(hào)和在S301中獲取的劃分符號(hào)的組合的出現(xiàn)次數(shù)自加I。若S306的處理結(jié)束,則統(tǒng)計(jì)部132移至S309的步驟。
[0083]在S301中獲取的字符代碼是空格符號(hào)的情況下(S304 是”),與S305相同進(jìn)行單詞的計(jì)數(shù)(S307)。另外,與S305相同,統(tǒng)計(jì)部132在統(tǒng)計(jì)表Tl不存在對(duì)應(yīng)的單詞的情況下,也包括緩沖區(qū)所儲(chǔ)存的字符代碼按照每個(gè)字符代碼進(jìn)行計(jì)數(shù)。若S307的處理結(jié)束,則統(tǒng)計(jì)部132清除緩沖區(qū)(S308)。
[0084]若進(jìn)行S303、S306以及S308的任意一個(gè),則統(tǒng)計(jì)部132判定讀出位置是否是加載至存儲(chǔ)區(qū)域Al的文件Fl的終端(S309)。在S309的判定中若不是終端(S309 否”),則統(tǒng)計(jì)部132移至S301的步驟。而且在S309的判定中若是終端(S309 是”),則統(tǒng)計(jì)部132結(jié)束統(tǒng)計(jì)處理。
[0085]若統(tǒng)計(jì)部132的統(tǒng)計(jì)處理結(jié)束,則控制部131返回到圖6的步驟,使排序部134執(zhí)行排序處理(S202)。排序部134基于由統(tǒng)計(jì)部132生成的統(tǒng)計(jì)信息(有關(guān)各字符信息的出現(xiàn)次數(shù))對(duì)被登錄至統(tǒng)計(jì)表Tl的字符信息(字符等符號(hào)、單詞等符號(hào)串、控制符號(hào)和劃分符號(hào)的組合等)進(jìn)行排序。例如,統(tǒng)計(jì)部132以出現(xiàn)次數(shù)從多到少的順序或從少到多的順序的任意一方,對(duì)被登錄至統(tǒng)計(jì)表Tl的字符信息進(jìn)行排序。
[0086]若S202的處理結(jié)束,則控制部131使分配部133執(zhí)行壓縮編碼的分配(S203)。分配部133基于哈夫曼編碼、算術(shù)編碼等越是高頻率的字符信息越分配較短的壓縮編碼算法來對(duì)在S202中按照頻率順序排序的字符信息組分配壓縮編碼。若對(duì)各字符信息分配壓縮編碼,則控制部131使排序部134基于字符信息來對(duì)字符信息和分配給字符信息的壓縮編碼的組進(jìn)行排序處理(S204)。排序部134例如按照從小到大的順序?qū)ψ址畔⒌淖址a進(jìn)行排序。例如,排序部134按照字符信息的第一個(gè)字符的字符代碼的值從小到大的順序排列,第一個(gè)字符的字符代碼相同的字符信息彼此按照從小到大的順序排列第二個(gè)字符的字符代碼的值。通過S204的處理排序的狀態(tài)是圖11所示的壓縮詞典D2。
[0087]若S204的處理結(jié)束,則控制部131進(jìn)行索引的生成處理(S205)??刂撇?31對(duì)字符信息和在S204中對(duì)該字符信息進(jìn)行了排序的字符信息組內(nèi)存在的表示位置(偏移)的信息建立對(duì)應(yīng)關(guān)系地生成索引。對(duì)于圖11所示的壓縮詞典D2而言,例如,偏移“0x126”等與字符“i”建立對(duì)應(yīng)關(guān)系。若在壓縮編碼的生成中利用該索引,則與從“i”開始的單詞對(duì)應(yīng)的壓縮編碼的檢索從“0x126”開始。若S205的處理結(jié)束,則生成部13結(jié)束壓縮詞典D2的生成處理。
[0088]圖11表示壓縮詞典的數(shù)據(jù)結(jié)構(gòu)例。在圖11所示的壓縮詞典D2中以建立有對(duì)應(yīng)關(guān)系的方式儲(chǔ)存字符信息和壓縮編碼。字符信息和壓縮編碼的組的儲(chǔ)存位置用以壓縮詞典D2的儲(chǔ)存位置為起點(diǎn)的偏移來表示。例如,字符信息“invent Λ”的信息被儲(chǔ)存在偏移0x0140。在S205中生成的索引利用該偏移實(shí)現(xiàn)檢索范圍的精確。另外,如上述那樣,“cO”表示與括弧內(nèi)的字符信息對(duì)應(yīng)的壓縮編碼。
[0089]壓縮詞典D2是由生成部13生成的,但作為另外一個(gè)例子,壓縮詞典D2也可以被預(yù)先存儲(chǔ)于存儲(chǔ)部15。此時(shí),壓縮詞典D2在多個(gè)文件中被通用使用。例如,在預(yù)先存儲(chǔ)于存儲(chǔ)部15的壓縮詞典D2中,例如,基于過去壓縮的文件、數(shù)據(jù)庫內(nèi)所存在的多個(gè)文件的字符信息的統(tǒng)計(jì)信息來分配壓縮編碼。
[0090]若生成部13結(jié)束壓縮詞典D2的生成處理,則控制部111返回到圖5的步驟,執(zhí)行壓縮數(shù)據(jù)生成處理(S104)。
[0091]圖9表示壓縮數(shù)據(jù)生成處理的處理步驟例。在壓縮數(shù)據(jù)生成處理的開始時(shí)刻,讀出位置被設(shè)置為加載至存儲(chǔ)區(qū)域Al的文件Fl的起點(diǎn),寫入位置被設(shè)置為存儲(chǔ)區(qū)域Α2的規(guī)定的位置,緩沖區(qū)被清除。讀出部113從讀出位置獲取字符代碼(S401)。控制部111在S401的字符代碼獲取后,更新讀出位置。并且,控制部111將讀出部113在S401中獲取的字符代碼儲(chǔ)存至緩沖區(qū)(S402)??刂撇?11判定在S401中獲取的字符代碼是否是空格符號(hào)(S403)ο
[0092]在S401中獲取的字符代碼不是空格符號(hào)的情況下(S403 否”),返回到S401的步驟,讀出部113從讀出位置獲取字符代碼。S卩,S401以及S402的步驟直到讀出空格符號(hào)為止被重復(fù)。
[0093]在S401中獲取的字符代碼是空格符號(hào)的情況下(S403 是”),檢索部112通過緩沖區(qū)內(nèi)儲(chǔ)存的字符代碼(或者字符代碼串)來檢索壓縮詞典D2(S404)。控制部111判定與緩沖區(qū)內(nèi)儲(chǔ)存的字符代碼(或者字符代碼串)一致的一致字符信息是否存在于壓縮詞典D2內(nèi)(S405)。在壓縮詞典D2內(nèi)不存在一致字符信息的情況下(S405 否”)的處理基于圖10后述。在存在一致字符信息的情況下(S405 是”)寫入部114將在壓縮詞典D2內(nèi)與一致字符信息建立有對(duì)應(yīng)關(guān)系的壓縮編碼寫入存儲(chǔ)區(qū)域A2的寫入位置(S406)。接著,控制部111更新寫入位置,并刪除(清除)緩沖區(qū)所儲(chǔ)存的字符代碼(或者字符代碼串)(S407)。并且,控制部111判定讀出位置是否是被加載至存儲(chǔ)區(qū)域Al的文件Fl的終端(S408)。
[0094]在讀出位置不是文件Fl的終端的情況下(S408 否”),返回到S401的步驟,讀出部113從讀出位置獲取字符代碼。在讀出位置是文件Fl的終端的情況下(S408 是”),控制部111結(jié)束壓縮數(shù)據(jù)生成處理。
[0095]圖10表示壓縮數(shù)據(jù)生成處理的處理步驟例。在S405的處理中,在壓縮詞典D2內(nèi)不存在一致字符信息的情況下(S405 否”),控制部111判定被空格符號(hào)劃分的字符代碼(或者字符代碼串)的末尾的字符代碼是否是劃分符號(hào)(S409)。S卩,在緩沖區(qū)所儲(chǔ)存的字符代碼串中,判定空格符號(hào)的之前的字符代碼是否表示劃分符號(hào)。對(duì)于是否是劃分符號(hào),使用與圖7的S302相同的判定條件。
[0096]在S409的判定中,末尾是劃分符號(hào)的情況下(S409 是”),控制部111生成緩沖區(qū)內(nèi)的末尾的劃分符號(hào)之前的字符代碼串中,