專利名稱:一種在內(nèi)存中緩存數(shù)據(jù)的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別是涉及在內(nèi)存中緩存數(shù)據(jù)領(lǐng)域。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展,功能更強(qiáng)的計(jì)算機(jī)不斷出現(xiàn),其計(jì)算能力不斷提高,可以處理的數(shù)據(jù)量也越來(lái)越大。在計(jì)算機(jī)進(jìn)行數(shù)據(jù)處理時(shí),待處理的數(shù)據(jù)需要先被讀入計(jì)算機(jī)的內(nèi)存,然后才能由計(jì)算機(jī)的處理器進(jìn)行處理,內(nèi)存是計(jì)算機(jī)的數(shù)據(jù)存儲(chǔ)部件,存放當(dāng)前正在使用的數(shù)據(jù)和程序,但由于內(nèi)存芯片的成本高,制造工藝復(fù)雜,無(wú)法象外存儲(chǔ)設(shè)備一樣做成海量容量,于是合理利用有限的內(nèi)存資源成為各種計(jì)算機(jī)應(yīng)用程序所要解決的問(wèn)題。在進(jìn)行數(shù)據(jù)處理時(shí),經(jīng)常需要處理幾十兆到幾百兆的數(shù)據(jù),這些數(shù)據(jù)可以是保存在本地文件中的,也可以是網(wǎng)絡(luò)上的,它們都可以看做一個(gè)流對(duì)象,采用流的操作對(duì)其進(jìn)行讀寫。當(dāng)采用流方式對(duì)多媒體文件的上載和下載時(shí),需要將一些文件流或網(wǎng)絡(luò)流中的數(shù)據(jù)緩存在內(nèi)存中,轉(zhuǎn)換成內(nèi)存流,以方便后續(xù)的讀取和處理,同樣的,有時(shí)候也需要先創(chuàng)建內(nèi)存流,再轉(zhuǎn)換成文件流或網(wǎng)絡(luò)流進(jìn)行存儲(chǔ)或者通過(guò)網(wǎng)絡(luò)傳輸。在這兩個(gè)過(guò)程中,我們都需要把數(shù)據(jù)緩存在內(nèi)存中。
在應(yīng)用軟件系統(tǒng)中,目前的內(nèi)存流是使用一個(gè)連續(xù)的數(shù)組來(lái)實(shí)現(xiàn)數(shù)據(jù)緩存的,一般包括下面的步驟(1)獲取待緩存流對(duì)象數(shù)據(jù)量的大??;(2)向當(dāng)前操作系統(tǒng)申請(qǐng)大小和待緩存流對(duì)象數(shù)據(jù)量一樣大小的內(nèi)存空間,在內(nèi)存空間中創(chuàng)建數(shù)組,所述數(shù)組占用的必須是連續(xù)的內(nèi)存空間;(3)讀取待緩存流對(duì)象數(shù)據(jù),按順序?qū)懭霐?shù)組中,直到寫完待緩存流對(duì)象中的所有數(shù)據(jù);(4)將在內(nèi)存空間中的數(shù)組封裝成為內(nèi)存流對(duì)象,供應(yīng)用程序使用。
使用現(xiàn)有的內(nèi)存流緩存數(shù)據(jù)的方法,存在下面的問(wèn)題由于計(jì)算機(jī)中的內(nèi)存被多個(gè)應(yīng)用程序頻繁使用,造成內(nèi)存碎片較多,能夠被使用的連續(xù)的空閑空間減少,當(dāng)要緩存大的流對(duì)象而創(chuàng)建內(nèi)存流時(shí),不易申請(qǐng)到連續(xù)的空間供內(nèi)存流使用;當(dāng)無(wú)法得到連續(xù)的內(nèi)存空間時(shí),系統(tǒng)會(huì)嘗試整理當(dāng)前內(nèi)存(回收當(dāng)前可用內(nèi)存、合并內(nèi)存碎片),當(dāng)仍舊不能滿足時(shí),內(nèi)存流的空間申請(qǐng)被置入等待隊(duì)列,系統(tǒng)會(huì)不停嘗試整理內(nèi)存,直到有能夠滿足內(nèi)存流要求的連續(xù)的空閑內(nèi)存空間;如果一直不能得到滿足要求的內(nèi)存空間,內(nèi)存流將無(wú)法創(chuàng)建;在繁忙的服務(wù)器環(huán)境中,頻繁的內(nèi)存整理占用了大量計(jì)算機(jī)資源,可能會(huì)引起在其上運(yùn)行的應(yīng)用程序停止響應(yīng),或者引起系統(tǒng)宕機(jī)??梢?jiàn),現(xiàn)有內(nèi)存流緩存數(shù)據(jù)的方法存在著不易獲取連續(xù)內(nèi)存空間和影響計(jì)算機(jī)系統(tǒng)的正常運(yùn)行的問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供了一種在內(nèi)存中緩存數(shù)據(jù)的方法及裝置,以解決現(xiàn)有技術(shù)中不易獲取內(nèi)存空間和影響系統(tǒng)的正常運(yùn)行的問(wèn)題。
為了解決上述技術(shù)問(wèn)題,本發(fā)明公開了一種在內(nèi)存中緩存數(shù)據(jù)的方法,包括按照預(yù)置的容量參數(shù)創(chuàng)建數(shù)組,所述數(shù)組占用連續(xù)內(nèi)存空間;接收待緩存數(shù)據(jù),寫入所述數(shù)組中;把所述數(shù)組的地址信息記錄在預(yù)置的線性表中;重復(fù)執(zhí)行上述步驟,直到所有的待緩存數(shù)據(jù)都被寫入數(shù)組并記錄在線性表中。
優(yōu)選的,還包括,接收應(yīng)用程序的數(shù)據(jù)讀取指令;按照所述線性表中記錄的數(shù)組的地址信息,按順序讀出各數(shù)組中的數(shù)據(jù),發(fā)送給應(yīng)用程序。
優(yōu)選的,所述待緩存數(shù)據(jù)來(lái)自本地文件數(shù)據(jù)流或者網(wǎng)絡(luò)數(shù)據(jù)流。
優(yōu)選的,所述線性表是順序表或者鏈表。
優(yōu)選的,還包括,將所述數(shù)組和所述線性表封裝為流接口對(duì)象。
本發(fā)明還提供了一種在內(nèi)存中緩存數(shù)據(jù)的裝置,其特征在于,包括數(shù)組創(chuàng)建單元,用于按照預(yù)置的容量參數(shù)創(chuàng)建數(shù)組,所述數(shù)組占用連續(xù)內(nèi)存空間;數(shù)據(jù)寫入單元,用于接收待緩存數(shù)據(jù),寫入所述數(shù)組中;地址信息記錄建單元,用于把所述數(shù)組的地址信息記錄在預(yù)置的線性表中;
控制單元,用于控制上述各單元的執(zhí)行,直到所有的待緩存數(shù)據(jù)都被寫入數(shù)組并記錄在線性表中。
優(yōu)選的,還包括,命令接收單元,用于接收應(yīng)用程序的數(shù)據(jù)讀取命令;數(shù)據(jù)讀取單元,用于按照所述線性表中記錄的數(shù)組的地址信息,按順序讀出各數(shù)組中的數(shù)據(jù),發(fā)送給應(yīng)用程序。
優(yōu)選的,所述待緩存數(shù)據(jù)來(lái)自本地文件數(shù)據(jù)流或者網(wǎng)絡(luò)數(shù)據(jù)流。
優(yōu)選的,所述線性表是順序表或者鏈表。
優(yōu)選的,還包括,對(duì)象封裝單元,用于將所述數(shù)組和所述線性表封裝為流接口對(duì)象。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn)1、采用多個(gè)小的數(shù)組分段存放緩存的數(shù)據(jù),小的數(shù)組需要占用的連續(xù)內(nèi)存空間也較小,多個(gè)數(shù)組的所占用的內(nèi)存空間可以不是連續(xù)的,這種小段的內(nèi)存空間易于在內(nèi)存中獲取,這種采用獲取多個(gè)小的不連續(xù)內(nèi)存空間來(lái)代替獲取一個(gè)大的連續(xù)內(nèi)存空間的辦法,解決了現(xiàn)有技術(shù)中不易獲取連續(xù)內(nèi)存空間的問(wèn)題。
2、由于本發(fā)明使用小的數(shù)組分段緩存數(shù)據(jù),而小的數(shù)組所需的內(nèi)存空間往往不需要系統(tǒng)進(jìn)行內(nèi)存整理就可以獲得,本發(fā)明比現(xiàn)有技術(shù)減少了需要進(jìn)行內(nèi)存整理的次數(shù),減少了內(nèi)存整理過(guò)程中占用系統(tǒng)資源對(duì)計(jì)算機(jī)系統(tǒng)的正常運(yùn)行的影響。
圖1是本發(fā)明的方法實(shí)施例1流程圖;圖2是本發(fā)明的方法實(shí)施例2流程圖;圖3是本發(fā)明的裝置實(shí)施例框圖。
具體實(shí)施例方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
首先敘述一下本發(fā)明的核心思想。在計(jì)算機(jī)中,內(nèi)存資源是有限,而且內(nèi)存往往被多個(gè)應(yīng)用程序所使用,應(yīng)用程序的運(yùn)行需要經(jīng)常調(diào)度不同的進(jìn)程進(jìn)行執(zhí)行,進(jìn)程被調(diào)度運(yùn)行時(shí),會(huì)經(jīng)常申請(qǐng)占用內(nèi)存空間,操作系統(tǒng)會(huì)根據(jù)進(jìn)程的要求,從連續(xù)和空閑的內(nèi)存空間中分出一部分滿足要求的空間給進(jìn)程使用,當(dāng)進(jìn)程退出運(yùn)行時(shí),釋放所占用的內(nèi)存空間,但由于和此部分空間相鄰的其他空間已經(jīng)分配給其它的應(yīng)用程序或進(jìn)程了,此空間釋放后,就成為一個(gè)單獨(dú)的空間,形成內(nèi)存空間的碎片,由于系統(tǒng)中有多個(gè)應(yīng)用程序,多次進(jìn)行上面的內(nèi)存分配過(guò)程,內(nèi)存空間可能存在很多的碎片。
在現(xiàn)在的數(shù)據(jù)處理的應(yīng)用中,經(jīng)常需要處理大量的數(shù)據(jù),這些數(shù)據(jù)可能來(lái)自網(wǎng)絡(luò)和本地文件中,這些數(shù)據(jù)可以當(dāng)作數(shù)據(jù)流來(lái)操作,如在具體的程序語(yǔ)言中,可以先把帶緩存的數(shù)據(jù)初始化一個(gè)數(shù)據(jù)流,通過(guò)讀取數(shù)據(jù)流就可以讀取待緩存的數(shù)據(jù),把它們作為數(shù)據(jù)流來(lái)操作,處理上可以比較方便。計(jì)算機(jī)要對(duì)這些待緩存數(shù)據(jù)進(jìn)行處理,必須先要把這些數(shù)據(jù)先裝載進(jìn)計(jì)算機(jī)的內(nèi)存中,只用在內(nèi)存中的數(shù)據(jù)才能被計(jì)算機(jī)的CPU(中央處理器)直接處理。
在現(xiàn)有技術(shù)中,應(yīng)用程序緩存這些來(lái)自文件或者網(wǎng)絡(luò)的數(shù)據(jù)流時(shí),需要在內(nèi)存中申請(qǐng)連續(xù)的內(nèi)存空間,當(dāng)數(shù)據(jù)流的數(shù)據(jù)量比較大時(shí),需要申請(qǐng)的連續(xù)內(nèi)存空間也比較大,當(dāng)向系統(tǒng)申請(qǐng)的空間大于目前系統(tǒng)中最大的連續(xù)的內(nèi)存空間時(shí),因?yàn)橄到y(tǒng)中沒(méi)有這樣的連續(xù)空間,就會(huì)發(fā)生不能分配內(nèi)存空間的問(wèn)題,應(yīng)用程序會(huì)處于等待狀態(tài),直到有合適的內(nèi)存空間被分配,同時(shí),操作系統(tǒng)會(huì)做內(nèi)存整理工作,試圖回收未被使用的已分配內(nèi)存空間,合并正在使用的內(nèi)存空間,內(nèi)存整理費(fèi)常耗費(fèi)系統(tǒng)資源,有可能使所有的應(yīng)用程序響應(yīng)緩慢或處于等待狀態(tài),影響系統(tǒng)的正常運(yùn)行,如果頻繁進(jìn)行內(nèi)存整理,容易造成系統(tǒng)宕機(jī),為了易于獲取需要的內(nèi)存空間,減少系統(tǒng)內(nèi)存整理的次數(shù),本發(fā)明把獲取的連續(xù)的整塊內(nèi)存空間改變?yōu)楂@取多個(gè)小塊的內(nèi)存空間,并通過(guò)一定的算法把不連續(xù)的空間組織起來(lái),可以封裝成為內(nèi)存流對(duì)象,供應(yīng)用程序調(diào)用。
參見(jiàn)圖1,是本發(fā)明的方法實(shí)施例1流程圖,包括步驟101,按照預(yù)置的容量參數(shù)創(chuàng)建數(shù)組,所述數(shù)組占用連續(xù)內(nèi)存空間;為了能在內(nèi)存中緩存數(shù)據(jù),需要在內(nèi)存中建立數(shù)組,并把數(shù)據(jù)寫入數(shù)組,從而實(shí)現(xiàn)緩存數(shù)據(jù)的目的,建立數(shù)組的過(guò)程就是向系統(tǒng)申請(qǐng)空間的過(guò)程,在內(nèi)存中,數(shù)組需要占用連續(xù)的內(nèi)存空間,合理的設(shè)置數(shù)組的容量參數(shù),可以使申請(qǐng)的連續(xù)內(nèi)存的大小合適以便于獲取,由于這個(gè)容量參數(shù)和當(dāng)前內(nèi)存的大小有關(guān)系,設(shè)置此參數(shù)時(shí),可以參照當(dāng)前物理內(nèi)存值的大小,例如可以設(shè)定為當(dāng)前物理內(nèi)存的1/10,也可以設(shè)置為通過(guò)試驗(yàn)后得到的經(jīng)驗(yàn)值。
優(yōu)選的,在本步驟中可以創(chuàng)建一維數(shù)組,也可以創(chuàng)建多維數(shù)組,兩者在存儲(chǔ)數(shù)據(jù)上作用相同,只是在寫入和讀取數(shù)據(jù)的具體操作方法上有些差異。
步驟102,接收待緩存數(shù)據(jù),寫入所述數(shù)組中。
從數(shù)據(jù)源中讀取待緩存的數(shù)據(jù),寫入所述的數(shù)組中。在讀取過(guò)程中,可以順序讀取,讀取數(shù)據(jù)后,按照順序?qū)懭霐?shù)組中。
步驟103,把所述數(shù)組的地址信息記錄在預(yù)置的線性表中。
數(shù)組可以看做是由一段連續(xù)的內(nèi)存空間構(gòu)成的,使用數(shù)組時(shí),可以通過(guò)引用其首地址來(lái)使用,例如在c語(yǔ)言中,數(shù)組就是指向數(shù)組首單元地址的指針,只要紀(jì)錄了數(shù)組名,就可以對(duì)數(shù)組進(jìn)行讀寫操作。在本步驟中,把前述步驟中創(chuàng)建并寫入數(shù)據(jù)的數(shù)組的地址信息按順序記錄預(yù)先設(shè)置的線性表中,在后續(xù)步驟中可以通過(guò)讀取線性表來(lái)獲得數(shù)組的地址信息,從而可以對(duì)數(shù)組進(jìn)行操作。
步驟104,重復(fù)執(zhí)行上述步驟,直到所有的待緩存數(shù)據(jù)都被寫入數(shù)組并記錄在線性表中。
當(dāng)有未讀取的待緩存數(shù)據(jù)時(shí),重復(fù)執(zhí)行步驟101到步驟103,直到所有數(shù)據(jù)都被寫入數(shù)組中。
當(dāng)存在未讀的待緩存數(shù)據(jù)時(shí),按照預(yù)置的容量參數(shù),再創(chuàng)建一個(gè)新的數(shù)組,讀取待緩存的數(shù)據(jù),寫入數(shù)組中,然后把數(shù)組的地址記錄在所述的線性表中,如果還存在未讀的數(shù)據(jù),就仍然重復(fù)上述過(guò)程。
把數(shù)組的地址信息記錄在所述的線性表中時(shí),也需要記錄每個(gè)數(shù)組之間的先后關(guān)系,可以采用兩種方式來(lái)實(shí)現(xiàn),一種是順序存儲(chǔ)各個(gè)數(shù)組的地址信息,其順序的關(guān)系就代表了各個(gè)數(shù)組的先后順序關(guān)系,這種方式的優(yōu)點(diǎn)是在現(xiàn)有節(jié)點(diǎn)尾部添加新節(jié)點(diǎn)方便,但對(duì)中間節(jié)點(diǎn)的插入和刪除操作不便;另一種是作為鏈表來(lái)處理,每個(gè)節(jié)點(diǎn)包括一個(gè)指針域和一個(gè)數(shù)據(jù)域,指針域指向下一個(gè)節(jié)點(diǎn),數(shù)據(jù)域用于保存數(shù)組的地址信息。
優(yōu)選的,還包括接收應(yīng)用程序的數(shù)據(jù)讀取指令;按照所述線性表中記錄的數(shù)組的地址信息,讀出數(shù)組中的數(shù)據(jù),發(fā)送給應(yīng)用程序。
當(dāng)應(yīng)用程序需要讀取緩存在內(nèi)存中的數(shù)據(jù)時(shí),發(fā)出數(shù)據(jù)讀取指令,此指令可以是讀取全部數(shù)據(jù)的指令,也可以是讀取數(shù)據(jù)中某個(gè)相對(duì)地址段中的數(shù)據(jù)。
由于所有的保存數(shù)據(jù)的數(shù)組的地址信息,都已經(jīng)保存在所述的線性表中,當(dāng)接收到的數(shù)據(jù)讀取指令是讀取全部數(shù)據(jù)的指令時(shí),按照所述線性表中的地址信息順次讀取各數(shù)組的地址信息,并讀取數(shù)組中的數(shù)據(jù),發(fā)送給應(yīng)用程序;當(dāng)應(yīng)用程序需要讀取數(shù)據(jù)中某個(gè)相對(duì)地址段中的數(shù)據(jù)時(shí),首先根據(jù)所述線性表中的數(shù)據(jù)及數(shù)組的容量參數(shù)推算出所要讀取的數(shù)據(jù)位于哪個(gè)數(shù)組中,然后讀取所述線性表,得到所要讀取的數(shù)組的地址信息,讀取數(shù)據(jù)的數(shù)據(jù),推算出所需要的數(shù)據(jù)在數(shù)組內(nèi)的相對(duì)地址,得到數(shù)據(jù),例如緩存數(shù)據(jù)的總數(shù)是98字節(jié),每個(gè)數(shù)組的容量參數(shù)是10字節(jié),現(xiàn)要讀取第32字節(jié)位置上的數(shù)據(jù),32/10=3.2,可見(jiàn)數(shù)據(jù)位于第4個(gè)數(shù)組的第2個(gè)單元中,先從保存數(shù)組地址信息的線性表中讀取第4個(gè)數(shù)組的地址信息,按照地址信息找到并讀取數(shù)組中的第2個(gè)單元中的數(shù)據(jù),返回給應(yīng)用程序。
優(yōu)選的,所述待緩存數(shù)據(jù)來(lái)自本地文件數(shù)據(jù)流或者網(wǎng)絡(luò)數(shù)據(jù)流。
待緩存數(shù)據(jù)的來(lái)源,即可以是本地的數(shù)據(jù)文件,也可以是網(wǎng)絡(luò)上的數(shù)據(jù),它們都可以采用流的方式來(lái)進(jìn)行操作,數(shù)據(jù)本身可以是任何數(shù)據(jù),例如,數(shù)據(jù)的本身就是單純的應(yīng)用程序數(shù)據(jù),也可以是各種多媒體數(shù)據(jù)或者其它數(shù)據(jù)。
優(yōu)選的,所述線性表是順序表或者鏈表。
線性表的存儲(chǔ)結(jié)構(gòu)可以用順序表或者鏈表來(lái)實(shí)現(xiàn)。
順序表是按線性表的邏輯結(jié)構(gòu)次序依次存放在一組地址連續(xù)的存儲(chǔ)單元中。在存儲(chǔ)單元中的各元素的物理位置和邏輯結(jié)構(gòu)中各結(jié)點(diǎn)相鄰關(guān)系是一致的。
鏈表是用一組任意的存儲(chǔ)單元來(lái)存放線性表的結(jié)點(diǎn),這組存儲(chǔ)單元可以分布在內(nèi)存中任何位置上。因此,鏈表中結(jié)點(diǎn)的邏輯次序和物理次序不一定相同。所以為了能正確表示結(jié)點(diǎn)間的邏輯關(guān)系,在存儲(chǔ)每個(gè)結(jié)點(diǎn)值的同時(shí),還存儲(chǔ)了其后繼結(jié)點(diǎn)的地址信息(即指針或鏈)。這兩部分信息組成鏈表中的結(jié)點(diǎn)結(jié)構(gòu)。一個(gè)單鏈表由頭指針的名字來(lái)命名。對(duì)于單鏈表,其操作運(yùn)算主要有建立單鏈表(頭插法、尾插法和在鏈表開始結(jié)點(diǎn)前附加一個(gè)頭結(jié)點(diǎn)的算法)、查找(按序號(hào)和按值)、插入運(yùn)算、刪除運(yùn)算等。以上各運(yùn)算的平均時(shí)間復(fù)雜度均為0(n).其主要時(shí)間是耗費(fèi)在查找操作上。
優(yōu)選的,還包括,將所述數(shù)組和所述線性表封裝為流接口對(duì)象。
為了便于使用,可以將所述的數(shù)組和所述的線性表封裝為流接口對(duì)象,封裝過(guò)程可以使用面向?qū)ο蟮母鞣N語(yǔ)言來(lái)實(shí)現(xiàn),封裝中,為方便使用,還可以封裝另外的方法調(diào)用,例如,數(shù)據(jù)寫入和讀取的方法等。
作為實(shí)施例1的一個(gè)擴(kuò)展,也可以先使用具體的代碼按照上述步驟中的操作實(shí)現(xiàn)分段流接口對(duì)象,把對(duì)數(shù)據(jù)的操作封裝成為所述分段流接口對(duì)象的方法,把保存數(shù)組地址信息的線性表封裝為所述分段流接口對(duì)象的內(nèi)部對(duì)象,并可以通過(guò)方法調(diào)用來(lái)讀取或?qū)懭氲刂沸畔?,還可以根據(jù)實(shí)際的需要封裝其它方法或者內(nèi)部對(duì)象,然后通過(guò)調(diào)用分段流接口對(duì)象所封裝的各種方法和內(nèi)部對(duì)象來(lái)實(shí)現(xiàn)對(duì)待緩存數(shù)據(jù)流的緩存。
參見(jiàn)圖2,是本發(fā)明的方法實(shí)施例2流程圖,本實(shí)施例以讀取10M視頻文件數(shù)據(jù)流為例,包括步驟201,設(shè)定單個(gè)小數(shù)組的大小參數(shù)sectionSize,例如可以設(shè)定為3M。
步驟202,創(chuàng)建一個(gè)分段流接口對(duì)象SectionByteInputStream。
分段流接口對(duì)象SectionByteInputStream中可以預(yù)先創(chuàng)建數(shù)組和鏈表,用于存儲(chǔ)數(shù)據(jù)和數(shù)組間的順序關(guān)系,也可以只創(chuàng)建鏈表,數(shù)組直接使用被加入到分段流接口對(duì)象中的數(shù)組,不另外創(chuàng)建數(shù)組。
步驟203,按照設(shè)定單個(gè)小數(shù)組的大小參數(shù)創(chuàng)建數(shù)組buf。
步驟204,按順序讀取視頻文件數(shù)據(jù)流,依次寫到數(shù)組buf中。
步驟205,并將數(shù)組buf添加到分段流接口對(duì)象SectionByteInputStream中。
步驟206,每讀取sectionSize大小的視頻文件數(shù)據(jù)流則重復(fù)步驟203到步驟205,直至讀取全部視頻文件數(shù)據(jù)流。
步驟207,應(yīng)用程序通過(guò)流分段流接口對(duì)象SectionByteInputStream訪問(wèn)流數(shù)據(jù)。
參見(jiàn)圖3,是本發(fā)明的裝置實(shí)施例框圖,包括數(shù)組創(chuàng)建單元301,用于按照預(yù)置的容量參數(shù)創(chuàng)建數(shù)組,所述數(shù)組占用連續(xù)內(nèi)存空間;
數(shù)據(jù)寫入單元302,用于接收待緩存數(shù)據(jù),寫入所述數(shù)組中;地址信息記錄單元303,用于把所述數(shù)組的地址信息記錄在預(yù)置的線性表中;控制單元304,用于控制上述各單元的執(zhí)行,直到所有的待緩存數(shù)據(jù)都被寫入數(shù)組并記錄在線性表中。
數(shù)組創(chuàng)建單元301創(chuàng)建合適大小的數(shù)組,數(shù)據(jù)寫入單元302讀取待緩存的數(shù)據(jù)并寫入所述數(shù)組中,地址信息記錄建單元303把所述數(shù)組的地址信息,一般是數(shù)組首單元的地址,記錄到預(yù)先設(shè)置的線性表中,控制單元304判斷是否還有未讀的待緩存數(shù)據(jù),如果存在,控制數(shù)組創(chuàng)建單元301、數(shù)據(jù)寫入單元302和地址信息記錄建單元303重復(fù)讀取待緩存數(shù)據(jù)并保存到數(shù)組中,直到所有待緩存數(shù)據(jù)都被讀入數(shù)組。
優(yōu)選的,所述裝置還包括,命令接收單元305,用于接收應(yīng)用程序的數(shù)據(jù)讀取命令;數(shù)據(jù)讀取單元306,用于按照所述線性表中記錄的數(shù)組的地址信息,按順序讀出各數(shù)組中的數(shù)據(jù),發(fā)送給應(yīng)用程序。
優(yōu)選的,所述待緩存數(shù)據(jù)來(lái)自本地文件數(shù)據(jù)流或者網(wǎng)絡(luò)數(shù)據(jù)流。
優(yōu)選的,所述線性表是順序表或者鏈表。
優(yōu)選的,所述裝置還包括,對(duì)象封裝單元,用于將所述數(shù)組和所述線性表封裝為流接口對(duì)象。
以上對(duì)本發(fā)明所提供的一種在內(nèi)存中緩存數(shù)據(jù)的方法及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。
權(quán)利要求
1.一種在內(nèi)存中緩存數(shù)據(jù)的方法,其特征在于,包括按照預(yù)置的容量參數(shù)創(chuàng)建數(shù)組,所述數(shù)組占用連續(xù)內(nèi)存空間;接收待緩存數(shù)據(jù),寫入所述數(shù)組中;把所述數(shù)組的地址信息記錄在預(yù)置的線性表中;重復(fù)執(zhí)行上述步驟,直到所有的待緩存數(shù)據(jù)都被寫入數(shù)組并記錄在線性表中。
2.根據(jù)權(quán)利要求1中所述的方法,其特征在于,在所述方法之后,還包括,接收應(yīng)用程序的數(shù)據(jù)讀取指令;按照所述線性表中記錄的數(shù)組的地址信息,按順序讀出各數(shù)組中的數(shù)據(jù),發(fā)送給應(yīng)用程序。
3.根據(jù)權(quán)利要求1或2中所述的方法,其特征在于,所述待緩存數(shù)據(jù)來(lái)自本地文件數(shù)據(jù)流或者網(wǎng)絡(luò)數(shù)據(jù)流。
4.根據(jù)權(quán)利要求1或2中所述的方法,其特征在于,所述線性表是順序表或者鏈表。
5.根據(jù)權(quán)利要求1或2中所述的方法,其特征在于,還包括,將所述數(shù)組和所述線性表封裝為流接口對(duì)象。
6.一種在內(nèi)存中緩存數(shù)據(jù)的裝置,其特征在于,包括數(shù)組創(chuàng)建單元,用于按照預(yù)置的容量參數(shù)創(chuàng)建數(shù)組,所述數(shù)組占用連續(xù)內(nèi)存空間;數(shù)據(jù)寫入單元,用于接收待緩存數(shù)據(jù),寫入所述數(shù)組中;地址信息記錄建單元,用于把所述數(shù)組的地址信息記錄在預(yù)置的線性表中;控制單元,用于控制上述各單元的執(zhí)行,直到所有的待緩存數(shù)據(jù)都被寫入數(shù)組并記錄在線性表中。
7.根據(jù)權(quán)利要求6中所述的裝置,其特征在于,還包括,命令接收單元,用于接收應(yīng)用程序的數(shù)據(jù)讀取命令;數(shù)據(jù)讀取單元,用于按照所述線性表中記錄的數(shù)組的地址信息,按順序讀出各數(shù)組中的數(shù)據(jù),發(fā)送給應(yīng)用程序。
8.根據(jù)權(quán)利要求6或7中所述的裝置,其特征在于,所述待緩存數(shù)據(jù)來(lái)自本地文件數(shù)據(jù)流或者網(wǎng)絡(luò)數(shù)據(jù)流。
9.根據(jù)權(quán)利要求6或7中所述的裝置,其特征在于,所述線性表是順序表或者鏈表。
10.根據(jù)權(quán)利要求6或7中所述的裝置,其特征在于,還包括,對(duì)象封裝單元,用于將所述數(shù)組和所述線性表封裝為流接口對(duì)象。
全文摘要
本發(fā)明公開了一種在內(nèi)存中緩存數(shù)據(jù)的方法及裝置,其中所述方法包括下列步驟按照預(yù)置的容量參數(shù)創(chuàng)建數(shù)組,所述數(shù)組占用連續(xù)內(nèi)存空間;接收待緩存數(shù)據(jù),寫入所述數(shù)組中;把所述數(shù)組的地址信息記錄在預(yù)置的線性表中;重復(fù)執(zhí)行上述步驟,直到所有的待緩存數(shù)據(jù)都被寫入數(shù)組并記錄在線性表中。本發(fā)明獲取多個(gè)小的不連續(xù)內(nèi)存空間用于緩存數(shù)據(jù),解決了現(xiàn)有技術(shù)中需要獲取大的連續(xù)內(nèi)存空間的問(wèn)題,并且減少了內(nèi)存整理的次數(shù),有利于計(jì)算機(jī)系統(tǒng)的正常穩(wěn)定的運(yùn)行。
文檔編號(hào)G06F17/30GK101013400SQ200710003019
公開日2007年8月8日 申請(qǐng)日期2007年1月30日 優(yōu)先權(quán)日2007年1月30日
發(fā)明者符修湖 申請(qǐng)人:金蝶軟件(中國(guó))有限公司