本申請涉及計算機技術(shù)領(lǐng)域,尤其涉及一種Java數(shù)據(jù)包生成方法及設(shè)備和信息提取方法及設(shè)備。
背景技術(shù):
近年來,越來越多的公司使用編譯工具(例如,maven)進行項目開發(fā)。所述編譯工具根據(jù)數(shù)據(jù)包(例如,Java數(shù)據(jù)包)在服務(wù)器中的坐標來存儲數(shù)據(jù)包,如此,其他開發(fā)人員開發(fā)或者使用這個項目時,只需要將所需的數(shù)據(jù)包在服務(wù)器中的坐標復(fù)制到自己的配置文件就可以自動地下載這些數(shù)據(jù)包。
在實際工作中,很多開發(fā)人員會對源代碼進行修改并將修改后的源代碼打包成新的Java數(shù)據(jù)包,但卻仍然使用原來的數(shù)據(jù)包的坐標,這會導(dǎo)致其他開發(fā)人員使用相同的坐標而得到不同的源代碼,使得第三方應(yīng)用無法確定所需的源代碼。
技術(shù)實現(xiàn)要素:
提供本發(fā)明的目的在于至少解決了上述問題和/或缺點,并至少提供了以下優(yōu)點。
本申請實施例提供一種Java數(shù)據(jù)包生成方法包括:生成包含用于標識Java源代碼的標識信息的文件;將所述文件存儲在所述Java源代碼所在的文件夾中;將所述文件和所述Java源代碼進行打包以生成Java數(shù)據(jù)包。
本申請實施例還提供一種Java數(shù)據(jù)包生成設(shè)備包括:生成單元,獲取包含用于標識Java源代碼的標識信息的文件;存儲單元,將所述文件存儲在所述Java源代碼所在的文件夾中;打包單元,將所述文件和所述Java源代碼進行打包以生成Java數(shù)據(jù)包。
本申請實施例還提供一種信息提取方法包括:確定Java數(shù)據(jù)包的坐標;根據(jù)所述坐標,獲取Java數(shù)據(jù)包,其中,在所述數(shù)據(jù)包中包括用于標識Java源代碼的標識信息的文件;從所述Java數(shù)據(jù)包中提取所述文件和所述Java源代碼。
本申請實施例還提供一種信息提取設(shè)備包括:確定單元,確定Java數(shù)據(jù)包的坐標;獲取單元,根據(jù)所述坐標,獲取Java數(shù)據(jù)包,其中,在所述數(shù)據(jù)包中包括用于標識Java源代碼的標識信息的文件;提取單元,從所述Java數(shù)據(jù)包中提取所述文件和所述Java源代碼。
與現(xiàn)有技術(shù)相比,根據(jù)本發(fā)明的示例性實施例的Java數(shù)據(jù)包生成方法及設(shè)備和信息提取方法及設(shè)備通過獲取對源代碼進行進一步描述的信息,從而能夠在沒有外部監(jiān)控的情況下對相同坐標的Java數(shù)據(jù)包進行區(qū)分,能夠準確獲取所需的源代碼,因此,能夠在對源代碼監(jiān)控、修改或定位等方面提供便利。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當限定。在附圖中:
圖1示出了本發(fā)明的示例性實施例的數(shù)據(jù)處理系統(tǒng)的架構(gòu)圖;
圖2示出了本發(fā)明的示例性實施例的數(shù)據(jù)處理系統(tǒng)的流程圖;
圖3示出了本發(fā)明的示例性實施例的數(shù)據(jù)處理系統(tǒng)實際使用過程的示圖;
圖4示出了本發(fā)明的示例性實施例的三種應(yīng)用場景的示圖;
圖5示出了本發(fā)明的示例性實施例的Java數(shù)據(jù)包生成設(shè)備的框圖;
圖6示出了本發(fā)明的示例性實施例的信息提取設(shè)備的框圖。
具體實施方式
為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請具體實施例及相應(yīng)的附圖對本申請技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
以下結(jié)合附圖,詳細說明本申請各實施例提供的技術(shù)方案。
圖1示出了本發(fā)明的示例性實施例的數(shù)據(jù)處理系統(tǒng)的架構(gòu)圖。
參照圖1,該示例性實施例的系統(tǒng)架構(gòu)包括服務(wù)器200以及多個工作機101、102和103,其中,服務(wù)器200通過網(wǎng)絡(luò)112與多個工作機101、102和103相連。需要說明的是:雖然圖中僅示出三個工作機,但是,本領(lǐng)域技術(shù)人員能理解,在本發(fā)明的系統(tǒng)架構(gòu)中,可根據(jù)實際需求包括更多或更少的工作機。
網(wǎng)絡(luò)112可以包括有線網(wǎng)絡(luò)和/或無線網(wǎng)絡(luò)。根據(jù)示例性實施例,網(wǎng)絡(luò)112可包括但不限于局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、內(nèi)部網(wǎng)、互聯(lián)網(wǎng)、移動電話網(wǎng)絡(luò)、虛擬專用網(wǎng)(VPN)、蜂窩式或其它移動通信網(wǎng)絡(luò)、藍牙、NFC或其任何組合。工作機101、102和103可以是軟件開發(fā)人員所使用的終端,例如,計算機。根據(jù)示例性實施例,服務(wù)器200可以用于存儲各個工作機提交的數(shù)據(jù)包(比如,Java數(shù)據(jù)包)并對這些數(shù)據(jù)包進行管理,工作機101、102和103可以定期將更新后的數(shù)據(jù)包提交到服務(wù)器200進行存儲。
當需要服務(wù)器200上存儲的數(shù)據(jù)包時,可以通過配置文件指定需要獲取的數(shù)據(jù)包在服務(wù)器200中的坐標,然后工作機根據(jù)該坐標從服務(wù)器200上獲取該坐標指向的數(shù)據(jù)包。
舉例而言,編程人員在利用java語言進行編程的過程中,除本地編寫好的java程序代碼外,往往還需要從第三方(比如,服務(wù)器200)中獲得相關(guān)的已有java程序代碼,以便將兩者進行編譯生成可執(zhí)行文件,進而加快軟件開發(fā)進度。在這種情況下,便需要從存儲有相關(guān)java數(shù)據(jù)包的服務(wù)器中進行下載。當從服務(wù)器下載java數(shù)據(jù)包時,可先在配置文件(例如,pom.xml)中配置java包在服務(wù)器200中的坐標(例如,所述坐標可從網(wǎng)站下載),隨后,編程人員可以通過工作機101(或102、103)從服務(wù)器200下載與該坐標指向的Java數(shù)據(jù)包。除這種依據(jù)配置文件中的坐標下載數(shù)據(jù)包的情形下,還可能存在一種情況:工作機在本地對Java數(shù)據(jù)包進行更新后,修改該Java數(shù)據(jù)包在服務(wù)器上的坐標,然后將修改后的Java數(shù)據(jù)包按照修改后的坐標上傳到服務(wù)器。
圖2示出了本發(fā)明的示例性實施例的數(shù)據(jù)處理系統(tǒng)的流程圖。
參照圖2,在步驟S110,工作機300生成包含用于標識Java源代碼的標識信息的文件。
具體來說,工作機300可獲取用于標識Java源代碼的信息(以下簡稱標識信息),隨后,用Java語言將標識信息編程為文件。
更具體地,工作機300可通過對Java源代碼所在的代碼倉庫信息進行分析來獲取標識信息。其中,標識信息可包括源代碼所在的代碼倉庫的版本號以及源代碼所在的代碼倉庫的分支路徑,或者標識信息可包括源代碼所在的代碼倉庫的版本號和源代碼所在的代碼倉庫的分支路徑以及生成所述版本號和分支路徑的生成時間。
舉例來說,假設(shè)源代碼所在的代碼倉庫是SVN倉庫。SVN是指管理源代碼的倉庫系統(tǒng),一般分為遠程代碼倉庫和本地代碼倉庫,通過本地代碼倉庫把源代碼下載到本地來使用,當修改倉庫線上代碼(讓所有使用的人都能共享最新修改)時,需要將改動提交上傳(其它人通過SVN命令更新自己本地的代碼即可)。而源代碼所在的代碼倉庫的版本號(即,SVN版本號)是指SVN倉庫線上代碼每次被修改后會產(chǎn)生的一個唯一的版本號,SVN版本號用于標示當前的代碼,并且下載代碼時可以通過版本號指定需要下載哪個時期的源代碼,也可通過版本號看出已下載的源代碼屬于哪次改動后的。源代碼所在的代碼倉庫的分支路徑(即,SVN分支路徑)則是源代碼存儲在本地代碼倉庫中的存儲路徑。
此外,源代碼所在的代碼倉庫還可以是GIT倉庫,GIT倉庫是比SVN更強大的分布式源代碼管理倉庫系統(tǒng)。GIT在提交源代碼到線上之前需要先提交到本地代碼倉庫,再將本地的版本推送到線上倉庫。GIT版本號與SVN版本號類似,并且GIT版本號采用加密算法SHA-1生成ID(SVN版本號為自增的正整數(shù))。由上可知,每一次SVN/GIT倉庫中的源代碼被修改后,會產(chǎn)生唯一的版本號來標識當前的源代碼,因此,可通過版本號來獲知源代碼屬于哪次改動的。因此,源代碼所在的代碼倉庫的版本號以及源代碼所在的代碼倉庫的分支路徑可以是GIT版本號和GIT分支路徑。
可選地,工作機可在獲取上述版本號和分支路徑的同時獲取生成上述版本號以及分支路徑的生成時間。
此外,標識信息中的參數(shù)可以通過多種形式來表示。在本示例性實施例中,可通過類屬性(例如,靜態(tài)常量)來表示所述標識信息中的參數(shù)。例如,可通過靜態(tài)常量來表示標識信息中的版本號和分支路徑:
其中,分支路徑為http://xxxxx.SVN,版本號為“56031”。
然后,用Java語言將標識信息編程為文件(例如,MyRevision.java)。
隨后,步驟S120,將所述文件存儲在所述源代碼所在的文件夾中。也就是說,所述文件與所述源代碼均保存在本地代碼倉庫中的相同的代碼目錄下。隨后,在步驟S130,將所述文件和源代碼一起編譯并打包,以生成Java數(shù)據(jù)包。其中,編譯是指將軟件從程序員寫的源代碼變成可被機器識別和執(zhí)行的可執(zhí)行程序的過程。軟件工程通常需要編譯大量的源代碼文件,既包括自己的,也包括從服務(wù)器下載的Java包。
在步驟S140,將Java數(shù)據(jù)包上傳至服務(wù)器200。
由此看來,根據(jù)本發(fā)明的示例性實施例的工作機300通過生成包含用于標識Java源代碼的標識信息的文件并將所述文件與源代碼一起打包生成Java數(shù)據(jù)包,能夠在獲取Java數(shù)據(jù)包后僅通過Java數(shù)據(jù)包本身中包含的標識信息即可對源代碼進行識別,從而可以區(qū)分具有相同坐標的Java數(shù)據(jù)包中的源代碼。例如,當編程人員需要在不改變配置文件中的坐標的情況下對源代碼進行修改時,可通過標識信息對不同時期修改的源代碼進行標識,這樣其他編程人員可通過Java數(shù)據(jù)包中的標識信息來識別出所需要的源代碼。
以下將詳細地解釋使用maven的示例性實施例。首先,在對使用maven的示例性實施例進行詳細解釋之前,對所涉及的術(shù)語進行詳細解釋以方便本領(lǐng)域技術(shù)人員的理解。
Maven是指java的自動化編譯工具,maven可根據(jù)配置文件中的maven坐標從maven倉庫自動下載Java數(shù)據(jù)包,與本地編寫的java代碼一起編譯成可執(zhí)行程序。Java包是指將源代碼編譯后的程序和相關(guān)文件打包成后綴名jar的文件,編譯時只需要將本地源碼和下載的Java包一起編譯即可。Maven倉庫將對外發(fā)布的Java包放置在統(tǒng)一的系統(tǒng)里進行管理,使用者在配置文件(pom.xml)中寫出想要引用的Java包的maven坐標即可。
Maven坐標通過groupId,artifactId和version來定位一個Java包。用groupId和artifactId來標示Maven倉庫,用version來表示這同一Maven倉庫的不同版本(可理解為不同時期)。例如,可使用如下所示的代碼對配置文件進行配置。
其中,groupId是com.alipay.sofa.service,artifactId是sofa-service-api,而version是3.2.8.2。
此外,maven采用插件化設(shè)計,它將工作流程切分為多個標準步驟,用戶可在配置文件(pom.xml)新增或修改每個步驟用到的插件。
由此,根據(jù)示例性實施例,可從遠程代碼倉庫(SVN/GIT)將源代碼下載到本地代碼倉庫(例如,工作機300中預(yù)設(shè)的文件夾中),或在本地代碼倉庫中直接編寫源代碼,然后,可在對源代碼進行編譯之前調(diào)用插件revision plugin,通過插件獲取源代碼所在的本地代碼倉庫的(SVN/GIT)的信息(例如,版本號、分支路徑和生成時間),自動生成臨時文件MyRevision.java(對應(yīng)于上文中所述的文件)以記錄上述信息,隨后,maven會將臨時文件Myrevision.java和源代碼一起編譯并打包,從而生成Java包,并且可在生成Java包的同時刪除臨時文件Myrevision.java。然后將所述Java包上傳到服務(wù)器。
上述實施例說明了Java數(shù)據(jù)包的生成以及所述Java數(shù)據(jù)包的上傳,而生成Java數(shù)據(jù)包是為了被第三方使用,下面再次參照圖2說明該Java數(shù)據(jù)包的使用過程。當工作機200需要所述Java數(shù)據(jù)包時,在步驟S210,確定Java數(shù)據(jù)包的坐標,例如,可從外部(例如,可從maven門戶網(wǎng)站下載)接收Java數(shù)據(jù)包的坐標,隨后,在步驟S220,根據(jù)所述Java數(shù)據(jù)包的坐標,從服務(wù)器下載所述Java數(shù)據(jù)包,其中,在所述數(shù)據(jù)包中包括用于標識Java源代碼的標識信息的文件。根據(jù)示例性實施例,在步驟S230,可從所述Java數(shù)據(jù)包中提取出文件和源代碼。在使用maven的示例性實施例中,工作機200可根據(jù)maven坐標(groupId,artifactId,version)下載Java數(shù)據(jù)包。由于不同的Java數(shù)據(jù)包的maven坐標可能相同,所以通過相同maven坐標會下載多個Java數(shù)據(jù)包,然后通過查看所述多個Java數(shù)據(jù)包中的標識信息來確定所需的Java數(shù)據(jù)包,因此僅通過Java數(shù)據(jù)包即可定位到所需的Java數(shù)據(jù)包。
例如,當被告知Java數(shù)據(jù)包不符合預(yù)期時,工作機可通過Java數(shù)據(jù)包中的Myrevision.java找到/識別出不符合預(yù)期的Java數(shù)據(jù)包,從而不必查看符合預(yù)期的Java數(shù)據(jù)包,從而節(jié)省了編程人員的時間。
為了更清楚地理解數(shù)據(jù)處理系統(tǒng)的處理過程,以下將參照圖3進行進一步解釋。圖3示出了本發(fā)明的示例性實施例的數(shù)據(jù)處理系統(tǒng)實際使用過程的示圖。
用戶A在工作機A上修改/生成Java源代碼,同時對Java源代碼所在的倉庫信息進行分析以生成臨時文件,然后利用mavin工具將生成的臨時文件與源代碼一起打包生成Java數(shù)據(jù)包,并將所述Java數(shù)據(jù)包上傳到服務(wù)器中的mavin倉庫。
當用戶B需要用戶A上傳的數(shù)據(jù)包時,用戶B需要獲取該數(shù)據(jù)包的mavin坐標,具體來說,用戶B可通過各種方式從外部獲取該數(shù)據(jù)包的Mavin坐標,例如,用戶B可如圖3中所示從用戶A接收所述mavin坐標,或者用戶B可從相關(guān)網(wǎng)站下載所述mavin坐標等。然后,用戶B在配置文件中寫下所述mavin坐標,從而將所述Java數(shù)據(jù)包從服務(wù)器中的mavin倉庫下載到工作機B中。接著,工作機B可將下載的Java包與本地源代碼一起編譯成可執(zhí)行軟件。此外,工作機B可從下載的Java包中提取出臨時文件和源代碼,從而可以根據(jù)臨時文件中包含的標識信息來確定下載的Java包是否為所需的Java包。
圖4示出了根據(jù)本發(fā)明的示例性實施例的三種應(yīng)用場景的示圖。
參照圖4,在根據(jù)示例性實施例的第一種應(yīng)用場景中,編程人員對配置文件(pom.xml)進行配置,使得在maven編譯之前自動調(diào)用插件Revision Plugin,并通過Revision Plugin使用GIT/SVN命令行來獲取分支路徑、版本號、生成時間等,從而生成臨時文件Myrevision類,并將臨時文件Myrevision類與源代碼(例如,業(yè)務(wù)類1、業(yè)務(wù)類2…業(yè)務(wù)類n)放在同一目錄(存儲在同一個文件夾)下,然后將Myrevision與源代碼一起編譯打包并將生成的Java包上傳,隨后,可將臨時文件Myrevision刪除。
在根據(jù)示例性實施例的第二種應(yīng)用場景中,在第三方(例如,app)通過在配置文件中設(shè)置maven坐標來下載并使用Java包的情況下,第三方可僅通過Java包本身來確定其所對應(yīng)的源代碼。詳細地說,第三方通過maven坐標下載Java數(shù)據(jù)包,并從Java數(shù)據(jù)包提取類文件MyRevision。通過類文件MyRevison,第三方可獲取源代碼所在的代碼倉庫的版本號和源代碼所在的代碼倉庫的分支路徑以及生成所述版本號和分支路徑的生成時間。
此外,在使用spring的系統(tǒng)中,可為Myrevision定義一個Bean,啟動Bean即可自動打印下載的Java包的版本號,可選地,第三方可通過debug工具查看Java包中的文件。由此可以看出,第三方僅通過下載的Java包即可獲取Java包所對應(yīng)的用于識別源代碼的信息,從而準確且迅速地尋找到所需的Java包。
此外,除了以上第三方通過下載Java包來查看源代碼的標識信息之外,第三方也可通過插件Revision Viewer在未加載和執(zhí)行時查看Java包的標識信息。如圖3中所示,在根據(jù)示例性實施例的第三種應(yīng)用場景中,第三方可使用插件Revision Viewer在未加載和執(zhí)行時查看Java包中的文件,從而獲取用于識別源代碼的信息。
在以上示出的三種場景中,都是通過源代碼的標識信息來準確地表示源代碼的信息,從而在不需要外部監(jiān)控的情況下,僅利用生成的Java包即可快速定位到所需的源代碼。
圖5示出了根據(jù)本發(fā)明的示例性實施例的Java數(shù)據(jù)包生成設(shè)備的框圖。參照圖5,根據(jù)示例性實施例的Java數(shù)據(jù)包生成設(shè)備包括生成單元510、存儲單元520和打包單元530。圖5中的Java數(shù)據(jù)包生成設(shè)備僅示出了與本示例性實施例相關(guān)的組件。因此,本領(lǐng)域普通技術(shù)人員將理解:在數(shù)據(jù)處理設(shè)備中還包括除了圖5中示出的組件之外的通用組件。
根據(jù)示例性實施例,生成單元510獲取包含用于標識Java源代碼的標識信息的文件。存儲單元520用于將所述文件存儲在所述Java源代碼所在的文件夾中。打包單元530用于將所述文件和所述Java源代碼進行打包以生成Java數(shù)據(jù)包。
進一步地,所述Java數(shù)據(jù)包生成設(shè)備還包括上傳單元(未示出)。上傳單元用于將所述Java數(shù)據(jù)包上傳到服務(wù)器。
圖6示出了根據(jù)本發(fā)明的示例性實施例的信息提取設(shè)備的框圖。
參照圖6,根據(jù)示例性實施例的信息提取設(shè)備可包括確定單元610、獲取單元620和提取單元630。圖6中的信息提取設(shè)備僅示出了與本示例性實施例相關(guān)的組件。因此,本領(lǐng)域普通技術(shù)人員將理解:在信息提取設(shè)備中還包括除了圖6中示出的組件之外的通用組件。
確定單元610用于確定Java數(shù)據(jù)包的坐標。獲取單元620用于根據(jù)Java數(shù)據(jù)包的坐標,獲取Java數(shù)據(jù)包,其中,在所述數(shù)據(jù)包中包括用于標識Java源代碼的標識信息的文件。提取單元630用于從所述Java數(shù)據(jù)包中提取文件和源代碼。
當使用相同maven坐標而得到多個不同Java數(shù)據(jù)包時,信息提取設(shè)備可根據(jù)標識信息來確定所需的源代碼。例如,可通過標識信息中的生成時間來確定是否在合理時間段內(nèi),并將在合理時間內(nèi)的Java數(shù)據(jù)包確定為所需的Java數(shù)據(jù)包。例如,可通過標識信息中的代碼倉庫的版本號和分支路徑來確定所需的Java數(shù)據(jù)包。
由此看來,本申請的技術(shù)方案通過在編程階段使用用于標識源代碼的信息來對源代碼進行進一步描述,從而能夠在沒有外部監(jiān)控的情況下對相同坐標的Java數(shù)據(jù)包進行區(qū)分,并且能夠快速獲取所需的源代碼,因此,能夠在對源代碼監(jiān)控、修改或定位等方面提供便利。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程Java數(shù)據(jù)包生成設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程Java數(shù)據(jù)包生成設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的設(shè)備。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程Java數(shù)據(jù)包生成設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令設(shè)備的制造品,該指令設(shè)備實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程Java數(shù)據(jù)包生成設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。