国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種重復(fù)圖片的檢測方法和裝置與流程

      文檔序號:11250975閱讀:1578來源:國知局
      一種重復(fù)圖片的檢測方法和裝置與流程

      本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,具體涉及一種重復(fù)圖片的檢測方法和裝置。



      背景技術(shù):

      安卓系統(tǒng)中,有些應(yīng)用程序會存在大量的重復(fù)圖片,即相同圖片,而重復(fù)的圖片會占用系統(tǒng)內(nèi)存資源,消耗大量的內(nèi)存資源。

      為了減低系統(tǒng)內(nèi)存資源消耗,需要查找出系統(tǒng)內(nèi)存中的重復(fù)圖片,即檢測重復(fù)圖片。目前重復(fù)圖片的檢測方式主要是通過人工的方式在內(nèi)存中查找重復(fù)圖片;具體地,技術(shù)人員從內(nèi)存中圖片進(jìn)行檢索,比較檢索到的圖片,以確定是否有相同圖片。

      然而,目前重復(fù)圖片的檢測方式需要人工參與,人工處理關(guān)于比較慢且耗時,因此,會導(dǎo)致檢測速度的效率比較低。



      技術(shù)實現(xiàn)要素:

      本發(fā)明實施例提供一種重復(fù)圖片的檢測方法和裝置,可以提高重復(fù)圖片的檢測效率。

      本發(fā)明實施例提供一種重復(fù)圖片的檢測方法,包括:

      獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,所述內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息;

      根據(jù)所述類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,所述屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸;

      根據(jù)所述多個實例的內(nèi)存使用信息和所述多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,所述屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值;

      根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù);

      從所述多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。

      相應(yīng)的,本發(fā)明實施例還提供一種重復(fù)圖片的檢測裝置,包括:

      文件獲取單元,用于獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,所述內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息;

      偏移獲取單元,用于根據(jù)所述類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,所述屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸;

      屬性值獲取單元,用于根據(jù)所述多個實例的內(nèi)存使用信息和所述多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,所述屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值;

      內(nèi)容獲取單元,用于根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù);

      重復(fù)圖片確定單元,用于從所述多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。

      本發(fā)明實施例采用獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,該內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息,然后,根據(jù)該類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,該屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸,根據(jù)該多個實例的內(nèi)存使用信息和該多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,該屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值,根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù);從該多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。該方案可以自動檢測內(nèi)存中的重復(fù)圖片,無需人工處理,因此,可以提高重復(fù)圖片的檢測速度,進(jìn)而提高重復(fù)圖片的檢測效率。

      附圖說明

      為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

      圖1a是本發(fā)明實施例提供的重復(fù)圖片的檢測方法的流程示意圖;

      圖1b是本發(fā)明實施例提供的hprof文件的數(shù)據(jù)結(jié)構(gòu)示意圖;

      圖1c是本發(fā)明實施例提供的heap_dump_segment的數(shù)據(jù)結(jié)構(gòu)示意圖;

      圖1d是本發(fā)明實施例提供的hprof文件中string的數(shù)據(jù)結(jié)構(gòu)示意圖;

      圖1e是本發(fā)明實施例提供的hprof文件中l(wèi)oadclass的數(shù)據(jù)結(jié)構(gòu)示意圖;

      圖1f是本發(fā)明實施例提供的hprof文件中classdump的數(shù)據(jù)結(jié)構(gòu)示意圖;

      圖1g是本發(fā)明實施例提供的hprof文件中instancedump的數(shù)據(jù)結(jié)構(gòu)示意圖;

      圖1h是本發(fā)明實施例提供的hprof文件中原始數(shù)組dump的數(shù)據(jù)結(jié)構(gòu)示意圖;

      圖1i是本發(fā)明實施例提供的重復(fù)圖片的示意圖;

      圖2是本發(fā)明實施例提供的重復(fù)用圖片的檢測方法的另一流程示意圖;

      圖3a是本發(fā)明實施例提供的重復(fù)圖片的檢測裝置的第一種結(jié)構(gòu)示意圖;

      圖3b是本發(fā)明實施例提供的重復(fù)圖片的檢測裝置的第二種結(jié)構(gòu)示意圖。

      具體實施方式

      下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。

      本發(fā)明實施例提供了一種重復(fù)圖片的檢測方法和裝置。以下將分別進(jìn)行詳細(xì)說明。

      實施例一、

      本實施例將從重復(fù)圖片的檢測裝置的角度進(jìn)行描述,該檢測裝置具體可以集成在終端中,該終端可以為電腦、手機(jī)等設(shè)備。

      一種重復(fù)圖片的檢測方法,包括:獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,該內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息,然后,根據(jù)該類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,該屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸,根據(jù)該多個實例的內(nèi)存使用信息和該多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,該屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值,根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù);從該多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。

      如圖1a所示,該重復(fù)圖片的檢測方法的具體流程可以如下:

      101、獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,該內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息。

      其中,應(yīng)用進(jìn)程的內(nèi)存使用文件可以為安卓系統(tǒng)中的heapdump(轉(zhuǎn)儲)文件,比如,可以為hprof文件。一個heapdump就是一個程序(如java進(jìn)程)在某個時間點上的內(nèi)存快照的快照,可以獲知程序的哪些部分正在使用大部分的內(nèi)存。一般heapdump保存為一種叫做hprof的二進(jìn)制格式,因此,也稱為hprof文件,如參考圖1b,為hprof文件的結(jié)構(gòu)示意圖。

      比如,當(dāng)內(nèi)存使用文件為hprof文件時,可以通過解析工具(如mat對二進(jìn)制的hprof文件進(jìn)行解析。其中,mat(memoryanalyzertool,內(nèi)存分析工具)為java堆棧分析工具,用于分析發(fā)現(xiàn)和定位內(nèi)存中的泄露和大開銷等內(nèi)存問題。

      本實施例中,內(nèi)存使用文件可以包括:文件頭部信息、類加載信息、多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息等等。

      其中,文件頭部信息包括字符串信息,比如,參考圖1b,當(dāng)內(nèi)存使用文件為hprof文件時,該文件頭部信息可以包括hprof_tag_string。參考圖1b,該類加載信息可以為文件中的hprof_tag_load_class。

      該類的內(nèi)存使用信息可以為安卓系統(tǒng)中的classdump(類轉(zhuǎn)儲)信息,該實例的內(nèi)存使用信息可以為安卓系統(tǒng)中的instancedump(實例轉(zhuǎn)儲)信息,該數(shù)組的內(nèi)存使用信息可以為安卓系統(tǒng)中primitivearraydump(原始數(shù)組轉(zhuǎn)儲)信息。比如,參考圖1b,當(dāng)內(nèi)存使用文件為hprof文件時,hprof文件包含hprof_tag_heap_dump_segment,該hprof_tag_heap_dump_segment存放的是內(nèi)存中堆信息包括線程、類、實例、棧幀等。

      參考圖1c,hprof_tag_heap_dump_segment可以包括:classdump、instancedump、primitivearraydump等信息。如圖1c所示,u1-u4分別表示該信息位占用的字節(jié)數(shù)從1字節(jié)到4字節(jié),id表示的是一個u4信息。每個信息內(nèi)容會有一個tag標(biāo)識,該tag為一個u1的信息內(nèi)容。

      102、根據(jù)該類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,該屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸。

      其中,圖片的格式有多種,比如,可以給為位圖(bitmap)格式等。

      本實施例中,圖片類的屬性(field)可以包括mbuffer(圖片數(shù)據(jù)緩存區(qū))和圖片尺寸,該圖片尺寸可以包括圖片的長寬,或者圖片的寬高,比如,mwindth、mheight。

      本實施例中,圖片類的屬性的偏移為圖片類的屬性在內(nèi)存的偏移位置或者偏移值。實際應(yīng)用中,要獲取圖片類的屬性值,就需要先獲取圖片類的屬性的偏移。

      比如,以安卓系統(tǒng)為例,可以根據(jù)classdump獲取相應(yīng)bitmapclass的屬性(如mbuffer、mwindth、mheight)的偏移。

      本實施例可以根據(jù)每個類的內(nèi)存使用信息(如classdump)獲取相應(yīng)圖片類的屬性的偏移,從而得到多個圖片類(如class)的屬性(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的偏移。比如,可以針對每個類的內(nèi)存使用信息進(jìn)行解析,得到每個類的屬性類型(typeoffield),然后,基于每個類的屬性類型獲取每個類(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的屬性的偏移,當(dāng)該類為圖片類如bitmapclass時,此時便可以得到圖片類的屬性(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的偏移,如bitmapclass中mbuffer、mwindth、mheight的偏移。

      由于本發(fā)明實施例關(guān)注的圖片類,即需要檢測圖片類,因此,為節(jié)省資源,本實施例可以針對每個類的內(nèi)存使用信息進(jìn)行解析,得到每個類的屬性類型(typeoffield),然后,確定當(dāng)前類是否為圖片類,若是,則基于每個類的屬性類型獲取每個類的屬性(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的偏移。優(yōu)選地,本實施例可以先獲取需要關(guān)注的圖片類標(biāo)識,然后,基于圖片類標(biāo)識和類對象標(biāo)識(classobjectid)來確定當(dāng)前類是否為圖片類。具體地,在獲取內(nèi)存使用文件之后,獲取偏移之前,本實施例檢測方法還可以包括:根據(jù)文件頭部信息和類加載信息獲取圖片類標(biāo)識;

      此時,步驟“根據(jù)該類的內(nèi)存使用信息獲取相應(yīng)圖片類的屬性的偏移”可以包括:

      對該類的使用信息進(jìn)行解析,得到該類的類對象標(biāo)識和屬性類型;

      當(dāng)該類對象標(biāo)識與該圖片類標(biāo)識相同時,確定該類為圖片類,并根據(jù)該屬性類型獲取該圖片類的屬性的偏移。

      本實施例中獲取的圖片類標(biāo)識為后續(xù)需要進(jìn)行重復(fù)圖片檢測的類標(biāo)識,本實施例可以通過內(nèi)存使用文件的頭部信息以及類加載信息來獲?。痪唧w地,可以對頭部信息(如頭部信息中的)進(jìn)行解析,得到字符串的標(biāo)識(stringid),并從字符串的標(biāo)識中選取與圖片類名相關(guān)的字符串的標(biāo)識,即圖片類名字符串的標(biāo)識,然后,對類加載信息進(jìn)行解析,利用類加載信息的字符串標(biāo)識(stringnameid)確定待檢測處理的圖片類標(biāo)識。即步驟“根據(jù)該文件頭部信息和該類加載信息獲取圖片類標(biāo)識”可以包括:

      對該文件頭部信息進(jìn)行解析,得到字符串的標(biāo)識;

      從字符串的標(biāo)識中獲取圖片類名字符串的標(biāo)識;

      對該內(nèi)存使用文件中類加載信息進(jìn)行解析,得類的字符串標(biāo)識及其對應(yīng)的類標(biāo)識;

      確定該類的字符串標(biāo)識與該圖片類名字符串的標(biāo)識是否相同;

      若相同,則確定該類標(biāo)識為圖片類標(biāo)識。

      其中,圖片類名字符串的標(biāo)識為圖片類的名稱字符串的標(biāo)識,也就是表示圖片類名稱的字符串的標(biāo)識。在對文件頭部信息進(jìn)行解析之后可以得多個字符串的標(biāo)識,本實施例可以從多個字符串的標(biāo)識中選取表示圖片類名稱的字符串的標(biāo)識。比如,參考圖1d,可以對hprof文件中的string字符信息進(jìn)行解析,得到字符串的標(biāo)識(stringid),如圖1d中“id(u4)”,然后,從stringid中選取圖片類名字符串的標(biāo)識(classnamestringid)。

      在獲取圖片類名字符串的標(biāo)識之后,可以對類加載信息(如loadclass)進(jìn)行解析,得到類的字符串標(biāo)識及其對應(yīng)的類標(biāo)識;比如,參考圖1e,在對loadclass信息解析后可以得到類的字符串標(biāo)識(stringnameid)以及類標(biāo)識,即“id(u4)”,當(dāng)類的字符串標(biāo)識(stringnameid)與前面得到圖片類名字符串的標(biāo)識(classnamestringid)相同時,表明當(dāng)前類為圖片類,該類的類標(biāo)識即“id(u4)”為圖片類標(biāo)識(classid)。在得到圖片類標(biāo)識之后還可將其存放在某個對象中,如可以將圖片類標(biāo)識(classid)存儲在mbitmapclassid中。

      本實施例在得到圖片類標(biāo)識之后,可以對類的使用信息如classdump進(jìn)行解析,以得到屬性類型和類對象標(biāo)識,如果類型對象標(biāo)識與圖片類標(biāo)識相同,則表明當(dāng)前類為圖片類如bitmapclass,此時,可以基于屬性類型獲取類中屬性(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的偏移。

      比如,以安卓系統(tǒng),且內(nèi)存使用文件為hprof文件為例,可以根據(jù)hprof文件中string字符串信息和loadclass(類加載)信息獲取圖片類標(biāo)識(如bitmapclassid)。當(dāng)存在多個classdump時,參考圖1f,可以對某個classdump進(jìn)行解析,得到classobjectid、以及屬性類型(typeoffield);確定該classobjectid是否與圖片類標(biāo)識(如bitmapclassid)相同,若相同,則認(rèn)為當(dāng)前class為圖片類(如bitmapclass),此時,可以基于屬性類型(typeoffield)獲取到屬性(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的偏移,如bitmapclass中mbuffer、mwindth、mheight的偏移。這樣在分別對多個classdump解析完成時,便可以得到多個圖片類的屬性的偏移。

      其中,根據(jù)屬性類型獲取偏移的方式可以有多種,優(yōu)選地,本實施例可以根據(jù)屬性類型獲取屬性占用內(nèi)存的位數(shù),然后,基于該位數(shù)來獲取屬性的偏移。也即步驟“據(jù)該屬性類型獲取該圖片類的屬性的偏移”可以包括:

      根據(jù)該屬性類型獲取該類的屬性占用內(nèi)存的位數(shù);

      根據(jù)該屬性占用內(nèi)存的位數(shù),獲取該圖片類的屬性的偏移。

      比如,參考圖1f,解析heapdumpsegment中的classdump,利用之前存儲的classid找到對應(yīng)的class塊,然后就可以看到在該class塊中就存儲了類中各個屬性的信息,如屬性類型信息。本實施例可以遍歷該類中的各屬性,在遍歷屬性同時利用各個屬性的占位情況計算各個屬性的偏移。由于各屬性的在占用內(nèi)存的位數(shù)是與屬性的屬性類型相關(guān)的,每個類型占用的內(nèi)存是固定(u1標(biāo)識當(dāng)前屬性的類型),因此,可以基于屬性類型來獲取屬性占用內(nèi)存的位數(shù),然后,基于該位數(shù)來獲取屬性偏移。例如當(dāng)前屬性為int則當(dāng)前屬性占用內(nèi)存為4bit,如果當(dāng)前屬性前有一個float,一個char類型,則當(dāng)前屬性偏移為4+1=5。

      103、根據(jù)該多個實例的內(nèi)存使用信息和該多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,該屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值。

      其中,圖片尺寸值可以包括:圖片長度值、圖片寬度值,或者:圖片長度值、圖片高度值。

      比如,可以根據(jù)多個instancedump和多個class的屬性的偏移,得到多個bitmap對象的屬性值如mbuffer、mwindth、mheight的值。其中,mbuffer的值為mbuffer在內(nèi)存中的地址值,。

      具體地,可以針對每個實例的內(nèi)存使用信息進(jìn)行解析,得到實例屬性值(如value),當(dāng)該實例的類為圖片類時,則可以基于該類的屬性偏移從實例屬性值中獲取該類的實例屬性值中獲取圖片對象的屬性值。也即步驟“根據(jù)該多個實例的內(nèi)存使用信息和該多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值”可以包括:

      對當(dāng)前實例的內(nèi)存使用信息進(jìn)行解析,得到當(dāng)前實例的類對象標(biāo)識以及實例屬性值;

      當(dāng)該類對象標(biāo)識與該圖片類標(biāo)識相同時,確定該當(dāng)前實例的類為圖片類;

      根據(jù)該圖片類的屬性的偏移從該實例屬性值中,獲取圖片對象的屬性值;

      將當(dāng)前實施例的內(nèi)存使用信息更新為下一個實例的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前實例的內(nèi)存使用信息進(jìn)行解析的步驟,直到解析完所有實例的內(nèi)存使用信息;

      當(dāng)該類型對象標(biāo)識與圖片類型標(biāo)識不相同時,將當(dāng)前實施例的內(nèi)存使用信息更新為下一個實例的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前實例的內(nèi)存使用信息進(jìn)行解析的步驟,直到解析完所有實例的內(nèi)存使用信息。

      比如,當(dāng)屬性包括mbuffer、mwindth、mheight時,在獲取mbuffer、mwindth、mheight的偏移之后,參考圖1g,可以對instancedump進(jìn)行解析,當(dāng)實例的類對象標(biāo)識(classobjectid)與之前的圖片類標(biāo)識(classid)相同時,認(rèn)為當(dāng)前實例的類為圖片類a,此時,可以根據(jù)圖片類a的屬性偏移從實例屬性值(如value)中獲取實例對象(此時實施對象為圖片對象)的屬性值;如mbuffer的偏移從實例屬性值(如value)中獲取mbuffer的地址值,根據(jù)mwindth、mheight的偏移從實例屬性值(如value)中獲取mwindth、mheight的值。比如,mbuffer的偏移為30,那么在得到實例屬性值value(如value=0x100)后,可以從value+30(即0x100+30=0x130)得到的地址0x130。接著,對下一個instancedump進(jìn)行解析執(zhí)行前述相同步驟,直到解析完所有的instancedump。

      104、根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù)。

      比如,可以根據(jù)多個bitmap對象的mbuffer值與多個primitivearraydump,獲取多個bitmap對象的圖片內(nèi)容數(shù)據(jù)。

      由于一般圖片內(nèi)容數(shù)據(jù)是利用一個byte的數(shù)組進(jìn)行儲存的,所以需要解析primitivearraydump來獲取圖片內(nèi)容數(shù)據(jù)。本實施例可以圖片對象結(jié)構(gòu)中可以知道m(xù)buffer就是一個byte結(jié)構(gòu),那么如果找到一個byte數(shù)組地址包含在mbuffer地址內(nèi),如找到一個byte數(shù)組地址和mbuffer地址值一致,mame可以認(rèn)為該數(shù)組就是存儲圖片對象具體圖片數(shù)據(jù)的數(shù)據(jù)區(qū)域。因此,本實施例可以,線對數(shù)組的內(nèi)存使用信息進(jìn)行解析,然后,確定數(shù)組的地址是否包含在某個圖片對象的mbuffer地址之內(nèi),如是,則從數(shù)組內(nèi)容數(shù)據(jù)中獲取圖片內(nèi)容數(shù)據(jù)。即步驟“根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù)”可以包括:

      對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析,得到數(shù)組的地址值以及數(shù)組內(nèi)容數(shù)據(jù);

      確定該數(shù)組的地址值是否包含在目標(biāo)圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值內(nèi);

      若是,則確定該數(shù)組為該目標(biāo)圖片對象的圖片數(shù)據(jù)緩存區(qū),并從該數(shù)組內(nèi)容數(shù)據(jù)中獲取目標(biāo)圖片對象的圖片內(nèi)容數(shù)據(jù);

      將當(dāng)前數(shù)組的內(nèi)存使用信息更新為下一個數(shù)組的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析的步驟,直到解析完所有數(shù)組的內(nèi)存使用信息;

      若否,則將當(dāng)前數(shù)組的內(nèi)存使用信息更新為下一個數(shù)組的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析的步驟,直到解析完所有數(shù)組的內(nèi)存使用信息。

      例如,在某個primitivearraydump解析后,可以得到該array的地址和array內(nèi)容數(shù)據(jù),若該array的地址包含bitmap對象b的mbuffer地址內(nèi),那么可以確定該array為bitmap對象b的圖片數(shù)據(jù)緩存區(qū),此時,便可以從該array內(nèi)容數(shù)據(jù)中獲取bitmap對象b的圖片內(nèi)容數(shù)據(jù),參考圖1h,在對primitivearraydump解析后可以從圖中“elements”(packedarray)獲取圖片內(nèi)容數(shù)據(jù),該圖片內(nèi)容數(shù)據(jù)為二進(jìn)制數(shù)據(jù)。若該array的地址不包含任一bitmap對象的mbuffer地址內(nèi)時,解析下一個primitivearraydump,直到解析完所有的primitivearraydump。

      105、從該多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。

      比如,從多個圖片對象中確定mwindth、mheight相同、且圖片內(nèi)容數(shù)據(jù)(這里是數(shù)組的大小以及數(shù)組各個數(shù)據(jù)位的值)相同的bitmap對象,這些bitmap對象對應(yīng)的圖片是同一圖片,因此,確定這些圖片為重復(fù)圖片。

      為方便用戶觀看和后續(xù)重復(fù)圖片的定位分析,本實施例還可以在確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片之后,記錄相同對象的mbuffer值以及圖片內(nèi)容數(shù)據(jù),當(dāng)解析完所有數(shù)組的內(nèi)存使用信息之后,輸出相同對象的mbuffer值以及圖片內(nèi)容數(shù)據(jù),參考圖1i,在通過步驟101-105檢測之后,通過查看導(dǎo)出的圖片信息發(fā)現(xiàn)的確實有重復(fù)的圖片,例如其中7bc99000、7bca1000上的圖片為重復(fù)圖片。

      本實施例可以通過將圖片對象的尺寸值、圖片內(nèi)容數(shù)據(jù)進(jìn)行比較得到相同圖片對象,進(jìn)而確定重復(fù)圖片??蛇x地,為提高比較速度以及重復(fù)圖片確定速度,本實施例可以在解析完所有數(shù)組的內(nèi)存使用信息之后,再對數(shù)組進(jìn)行解析,以實現(xiàn)圖片對象的圖片尺寸值、圖片內(nèi)容數(shù)據(jù)的比較。具體地,步驟“從該多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片”可以包括:

      當(dāng)解析完所有數(shù)組的內(nèi)存使用信息之后,再次對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析,得到數(shù)組的地址值;

      確定該數(shù)組的地址值是否包含在目標(biāo)圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值內(nèi);

      若是,則判斷該多個圖片對象中是否存在與目標(biāo)圖片對象的圖片尺寸值和圖片內(nèi)容數(shù)據(jù)均相同的其他圖片對象;

      若存在,則確定該目標(biāo)對象與該其他圖片對象為相同圖片對象,以及確定該相同圖片對象對應(yīng)的圖片為重復(fù)圖片;

      將當(dāng)前數(shù)組的內(nèi)存使用信息更新為下一個數(shù)組的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析的步驟,直到再次解析完所有數(shù)組的內(nèi)存使用信息;

      若該數(shù)組的地址值不包含在目標(biāo)圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值內(nèi),或者不存在與目標(biāo)圖片對象的圖片尺寸值和圖片內(nèi)容數(shù)據(jù)均相同的其他圖片對象時,將當(dāng)前數(shù)組的內(nèi)存使用信息更新為下一個數(shù)組的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析的步驟,直到再次解析完所有數(shù)組的內(nèi)存使用信息。

      其中,其他圖片對象為多個圖片對象中除了目標(biāo)圖片對象以外的圖片對象。

      比如,通過第一次對所有primitivearraydump解析后得到多個圖片對象的圖片尺寸值和圖片內(nèi)容數(shù)據(jù),bitmap對象1、bitmap對象2……bitmap對象n的圖片尺寸值和圖片內(nèi)容數(shù)據(jù);再次對所有primitivearraydump解析,當(dāng)對某個primitivearraydump解析后,如果該primitivearraydump的地址包含在bitmap對象i的mbuffer地址內(nèi),此時,可以確定除將bitmap對象i的其余bitmap對象中有是否存在與bitmap對象i圖片尺寸值和圖片內(nèi)容數(shù)據(jù)均相同的bitmap對象,如存在,假設(shè)bitmap對象1、bitmap對象2與bitmap對象i圖片尺寸值和圖片內(nèi)容數(shù)據(jù)均相同,此時,確定bitmap對象1、bitmap對象2、bitmap對象i為相同bitmap對象,并確定bitmap對象1、bitmap對象2、bitmap對象i對應(yīng)的圖片為重復(fù)圖片;然后,再次對下一個primitivearraydump解析執(zhí)行前述相同的步驟,以確定重復(fù)圖片,直到再次解析完所有的primitivearraydump。

      由上可知,本發(fā)明實施例采用獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,該內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息,然后,根據(jù)該類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,該屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸,根據(jù)該多個實例的內(nèi)存使用信息和該多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,該屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值,根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù);從該多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。該方案可以自動檢測內(nèi)存中的重復(fù)圖片,無需人工處理,因此,可以提高重復(fù)圖片的檢測速度,進(jìn)而提高重復(fù)圖片的檢測效率。

      此外,該方案無需依賴于檢測人員的分析經(jīng)驗,可以避免由于檢測人員缺乏分析經(jīng)驗導(dǎo)致誤判斷重復(fù)圖片的情況,可以提高重復(fù)圖片的檢測準(zhǔn)確性。

      實施例二、

      根據(jù)實施例一所描述的方法,將通過舉例來進(jìn)一步說明。

      本實施例將以檢測安卓系統(tǒng)中的重復(fù)圖片為例,來對本發(fā)明提供的檢測方法來詳細(xì)說明。

      如圖2所示,本發(fā)明提供了一種重復(fù)圖片的檢測方法,具體流程如下:

      201、獲取應(yīng)用進(jìn)程的hprof文件,該hprof文件包括:hprof頭部信息、loadclass、多個classdump、instancedump以及多個primitivearraydump。

      該應(yīng)用進(jìn)程的內(nèi)存使用文件可以hprof文件,參考圖1b。

      參考圖1c,hprof_tag_heap_dump_segment可以包括:classdump、instancedump、primitivearraydump等信息。如圖1c所示,u1-u4分別表示該信息位占用的字節(jié)數(shù)從1字節(jié)到4字節(jié),id表示的是一個u4信息。每個信息內(nèi)容會有一個tag標(biāo)識,該tag為一個u1的信息內(nèi)容。

      202、對hprof頭部信息進(jìn)行解析,得到字符串的標(biāo)識;并從字符串的標(biāo)識中獲取圖片類名字符串的標(biāo)識。

      以對hprof文件中的string字符信息進(jìn)行解析,得到字符串的標(biāo)識(stringid),如圖1d中“id(u4)”,然后,從stringid中選取圖片類名字符串的標(biāo)識(classnamestringid)。

      203、對loadclass進(jìn)行解析,得到class的字符串標(biāo)識及其對應(yīng)的類標(biāo)識。

      參考圖1f,可以對某個classdump進(jìn)行解析,得到classobjectid、以及屬性類型(typeoffield);確定該classobjectid是否與圖片類標(biāo)識(如bitmapclassid)相同,若相同,則認(rèn)為當(dāng)前class為圖片類(如bitmapclass),此時,可以基于屬性類型(typeoffield)獲取到屬性(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的偏移,如bitmapclass中mbuffer、mwindth、mheight的偏移。

      204、當(dāng)class的字符串標(biāo)識與圖片類名字符串的標(biāo)識相同時,確定類標(biāo)識為bitmap類標(biāo)識。

      比如,參考圖1e,在對loadclass信息解析后可以得到類的字符串標(biāo)識(stringnameid)以及類標(biāo)識,即“id(u4)”,當(dāng)類的字符串標(biāo)識(stringnameid)與前面得到圖片類名字符串的標(biāo)識(classnamestringid)相同時,表明當(dāng)前類為圖片類,該類的類標(biāo)識即“id(u4)”為圖片類標(biāo)識(classid)。

      205、對當(dāng)前classdump進(jìn)行解析,得到類對象標(biāo)識(classobjectid)、以及屬性類型(typeoffield)。

      206、判斷該類對象標(biāo)識是否與bitmap類標(biāo)識相同,若相同,則執(zhí)行步驟207,若不相同,則執(zhí)行步驟209。

      207、確定當(dāng)前class為bitmapclass,根據(jù)屬性類型獲取mbuffer、mwindth、mheight的偏移。

      參考圖1f,可以對某個classdump進(jìn)行解析,得到classobjectid、以及屬性類型(typeoffield);確定該classobjectid是否與圖片類標(biāo)識(如bitmapclassid)相同,于屬性類型(typeoffield)獲取mbuffer、mwindth、mheight。的偏移。

      208、判斷是否解析完所有classdump,若否,則執(zhí)行步驟209,若是,則執(zhí)行步驟210。

      209、對下一個classdump進(jìn)行解析,得到類對象標(biāo)識(classobjectid)、以及屬性類型(typeoffield),并返回執(zhí)行步驟207。

      210、對當(dāng)前instancedump進(jìn)行解析,得到類對象標(biāo)識(classobjectid)以及實例屬性值(value)。

      211、判斷該類對象標(biāo)識是否與bitmap類標(biāo)識相同,若相同,則執(zhí)行步驟212,若不相同,則執(zhí)行步驟214。

      212、根據(jù)mbuffer、mwindth、mheight的偏移從實例屬性值中獲取bitmap對象的mbuffer、mwindth、mheight值。

      參考圖1g,可以對instancedump進(jìn)行解析,當(dāng)實例的類對象標(biāo)識(classobjectid)與之前的圖片類標(biāo)識(classid)相同時,認(rèn)為當(dāng)前實例的類為圖片類,此時,可以根據(jù)該圖片類的屬性偏移從實例屬性值(如value)中獲取mbuffer、mwindth、mheight值。

      其中,mbuffer的值為mbuffer的地址值。

      本實施例可以,將mbuffer、mwindth、mheight值存在一個bitmapinfo對象中。然后以mbuffer為key,bitmapinfo對象為value建立一個map對(mbuffertoinfo)供后續(xù)使用。

      213、判斷是否解析完所有的instancedump,若否,則執(zhí)行步驟214,若是,則執(zhí)行步驟215。

      214、對下一個instancedump進(jìn)行解析,并返回執(zhí)行步驟211。

      215、對當(dāng)前原始數(shù)組dump進(jìn)行解析,得到數(shù)組的地址值以及數(shù)組內(nèi)容數(shù)據(jù)。

      216、確定數(shù)組的地址是否包含在bitmap對象的mbuffer地址內(nèi),若是,則執(zhí)行步驟217,若否,則執(zhí)行步驟218。

      在構(gòu)建mbuffer為key,bitmapinfo對象為value的map對象的情況下,可以確定數(shù)字的地址是否包含在bitmapinfo的key中。

      217、確定當(dāng)前數(shù)組為該bitmap對象的mbuffer,并從數(shù)組內(nèi)容數(shù)據(jù)獲取bitmap對象的圖片內(nèi)容數(shù)據(jù)。

      其中,圖片內(nèi)容數(shù)據(jù)包括數(shù)組的大小以及數(shù)組各數(shù)據(jù)為的值。

      本實施例可以構(gòu)建map對象mbitmapbuffer,存儲圖片內(nèi)容數(shù)據(jù),以mbuffer為key,mbitmapbuffer對象為value建立一個map對供后續(xù)使用。

      218、判斷是否解析完所有的原始數(shù)組dump,若否,則執(zhí)行步驟219,若是,則執(zhí)行步驟220。

      219、對下一個原始數(shù)組dump進(jìn)行解析,并返回執(zhí)行步驟216。

      220、再次對當(dāng)前原始數(shù)組dump進(jìn)行解析,得到數(shù)組的地址值。

      221、確定數(shù)組的地址是否包含在bitmap對象的mbuffer地址內(nèi),若是,則執(zhí)行步驟222,若否,則執(zhí)行步驟224。

      222、確定是否存在與該bitmap對象mwindth、mheight值、圖片內(nèi)容數(shù)據(jù)均相同的其他bitmap對象,若是,則執(zhí)行步驟223,若否,則執(zhí)行步驟224。

      比如,以mbuffer地址為key遍歷mbuffertoinfo及其對應(yīng)的mbitmapbuffer比較存儲mwindth、mheight,以及具體的圖像內(nèi)容數(shù)據(jù)(這個需要比較byte數(shù)組的大小以及數(shù)組各個數(shù)據(jù)位的值)是否相等,如果相等,則認(rèn)為相等的幾個圖片是同一圖片,將其mbuffer和二進(jìn)制圖片數(shù)據(jù)記錄在一個hashset中。

      223、確定該bitmap對象與其他bitmap對象對應(yīng)的bitmap為重復(fù)bitmap,記錄bitmap對象的mbuffer值和圖片內(nèi)容數(shù)據(jù)。

      224、判斷是否解析完所有的原始數(shù)組dump,若否,則執(zhí)行步驟225,若是,則執(zhí)行步驟226。

      225、再次對下一個原始數(shù)組dump進(jìn)行解析,并返回執(zhí)行步驟223。

      226、輸出記錄的mbuffer值和圖片內(nèi)容數(shù)據(jù)。

      比如,處理hashset中記錄數(shù)據(jù),將二進(jìn)制圖片數(shù)據(jù)轉(zhuǎn)為圖像信息導(dǎo)出到磁盤,同時統(tǒng)計重復(fù)的圖片數(shù)量和重復(fù)的類型。

      由上可知,本發(fā)明實施例采用獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,該內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息,然后,根據(jù)該類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,該屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸,根據(jù)該多個實例的內(nèi)存使用信息和該多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,該屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值,根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù);從該多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。該方案可以自動檢測內(nèi)存中的重復(fù)圖片,無需人工處理,因此,可以提高重復(fù)圖片的檢測速度,進(jìn)而提高重復(fù)圖片的檢測效率。

      此外,該方案無需依賴于檢測人員的分析經(jīng)驗,可以避免由于檢測人員缺乏分析經(jīng)驗導(dǎo)致誤判斷重復(fù)圖片的情況,可以提高重復(fù)圖片的檢測準(zhǔn)確性。

      實施例三、

      為了更好地實施以上方法,本發(fā)明實施例還提供重復(fù)圖片的檢測裝置,如圖3a所示,該重復(fù)圖片的檢測裝置可以包括:文件獲取單元301、偏移獲取單元302、屬性值獲取單元303、內(nèi)容獲取單元304和重復(fù)圖片確定單元305,如下:

      (1)文件獲取單元301;

      文件獲取單元301,用于獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,該內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息。

      其中,應(yīng)用進(jìn)程的內(nèi)存使用文件可以為安卓系統(tǒng)中的heapdump(轉(zhuǎn)儲)文件,比如,可以為hprof文件。一個heapdump就是一個程序(如java進(jìn)程)在某個時間點上的內(nèi)存快照的快照,可以獲知程序的哪些部分正在使用大部分的內(nèi)存。一般heapdump保存為一種叫做hprof的二進(jìn)制格式,因此,也稱為hprof文件。

      內(nèi)存使用文件可以包括:文件頭部信息、類加載信息、多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息等等。

      比如,該類的內(nèi)存使用信息可以為安卓系統(tǒng)中的classdump(類轉(zhuǎn)儲)信息,該實例的內(nèi)存使用信息可以為安卓系統(tǒng)中的instancedump(實例轉(zhuǎn)儲)信息,該數(shù)組的內(nèi)存使用信息可以為安卓系統(tǒng)中primitivearraydump(原始數(shù)組轉(zhuǎn)儲)信息。

      (2)偏移獲取單元302;

      偏移獲取單元302,用于根據(jù)該類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,該屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸。

      其中,圖片的格式有多種,比如,可以給為位圖(bitmap)格式等。

      本實施例中,圖片類的屬性(field)可以包括mbuffer(圖片數(shù)據(jù)緩存區(qū))和圖片尺寸,該圖片尺寸可以包括圖片的長寬,或者圖片的寬高,比如,mwindth、mheight。

      本實施例中,圖片類的屬性的偏移為圖片類的屬性在內(nèi)存的偏移位置或者偏移值。實際應(yīng)用中,要獲取圖片類的屬性值,就需要先獲取圖片類的屬性的偏移。

      比如,以安卓系統(tǒng)為例,可以根據(jù)classdump獲取相應(yīng)bitmapclass的屬性(如mbuffer、mwindth、mheight)的偏移。

      本實施例中,針對每個類的內(nèi)存使用信息進(jìn)行解析,得到每個類的屬性類型(typeoffield),然后,基于每個類的屬性類型獲取每個類(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的屬性的偏移,當(dāng)該類為圖片類如bitmapclass時,此時便可以得到圖片類的屬性(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的偏移,如bitmapclass中mbuffer、mwindth、mheight的偏移。

      優(yōu)選地,本實施例可以先獲取需要關(guān)注的圖片類標(biāo)識,然后,基于圖片類標(biāo)識和類對象標(biāo)識(classobjectid)來確定當(dāng)前類是否為圖片類,若是,則基于每個類的屬性類型獲取每個類的屬性(圖片數(shù)據(jù)緩存區(qū)、圖片尺寸)的偏移。參考圖3b,檢測裝置還包括:類標(biāo)識獲取單元306;

      類標(biāo)識獲取單元306,用于在文件獲取單元301獲取內(nèi)存使用文件之后,偏移獲取單元獲取偏移之前,根據(jù)該頭部信息和該類加載信息獲取圖片類標(biāo)識;

      該偏移獲取單元302,具體用于:

      對該類的使用信息進(jìn)行解析,得到該類的類對象標(biāo)識和屬性類型;

      當(dāng)該類對象標(biāo)識與該圖片類標(biāo)識相同時,確定該類為圖片類,并根據(jù)該屬性類型獲取該圖片類的屬性的偏移。

      其中,類標(biāo)識獲取單元306可以具體用于:

      對該文件頭部信息進(jìn)行解析,得到字符串的標(biāo)識;

      從字符串的標(biāo)識中獲取圖片類名字符串的標(biāo)識;

      對該內(nèi)存使用文件中類加載信息進(jìn)行解析,得類的字符串標(biāo)識及其對應(yīng)的類標(biāo)識;

      確定該類的字符串標(biāo)識與該圖片類名字符串的標(biāo)識是否相同;

      若相同,則確定該類標(biāo)識為圖片類標(biāo)識。

      其中,移獲取單元302,具體用于根據(jù)該屬性類型獲取該類的屬性占用內(nèi)存的位數(shù),根據(jù)該屬性占用內(nèi)存的位數(shù),獲取該圖片類的屬性的偏移。

      (3)屬性值獲取單元303;

      屬性值獲取單元303,用于根據(jù)該多個實例的內(nèi)存使用信息和該多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,該屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值。

      其中,圖片尺寸值可以包括:圖片長度值、圖片寬度值,或者:圖片長度值、圖片高度值。

      比如,可以根據(jù)多個instancedump和多個class的屬性的偏移,得到多個bitmap對象的屬性值如mbuffer、mwindth、mheight的值。其中,mbuffer的值為mbuffer在內(nèi)存中的地址值,

      其中,屬性值獲取單元303,可以具體用于:

      對當(dāng)前實例的內(nèi)存使用信息進(jìn)行解析,得到當(dāng)前實例的類對象標(biāo)識以及實例屬性值;

      當(dāng)該類對象標(biāo)識與該圖片類標(biāo)識相同時,確定該當(dāng)前實例的類為圖片類;

      根據(jù)該圖片類的屬性的偏移從該實例屬性值中,獲取圖片對象的屬性值;

      將當(dāng)前實施例的內(nèi)存使用信息更新為下一個實例的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前實例的內(nèi)存使用信息進(jìn)行解析的步驟,直到解析完所有實例的內(nèi)存使用信息。

      比如,當(dāng)屬性包括mbuffer、mwindth、mheight時,在獲取mbuffer、mwindth、mheight的偏移之后,參考圖1g,可以對instancedump進(jìn)行解析,當(dāng)實例的類對象標(biāo)識(classobjectid)與之前的圖片類標(biāo)識(classid)相同時,認(rèn)為當(dāng)前實例的類為圖片類a,此時,可以根據(jù)圖片類a的屬性偏移從實例屬性值(如value)中獲取實例對象(此時實施對象為圖片對象)的屬性值;如mbuffer的偏移從實例屬性值(如value)中獲取mbuffer的地址值,根據(jù)mwindth、mheight的偏移從實例屬性值(如value)中獲取mwindth、mheight的值。

      (4)內(nèi)容獲取單元304;

      內(nèi)容獲取單元304,用于根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù)。

      比如,內(nèi)容獲取單元304可以根據(jù)多個bitmap對象的mbuffer值與多個primitivearraydump,獲取多個bitmap對象的圖片內(nèi)容數(shù)據(jù)。

      由于一般圖片內(nèi)容數(shù)據(jù)是利用一個byte的數(shù)組進(jìn)行儲存的,所以需要解析primitivearraydump來獲取圖片內(nèi)容數(shù)據(jù)。因此,內(nèi)容獲取單元304可以具體用于:

      對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析,得到數(shù)組的地址值以及數(shù)組內(nèi)容數(shù)據(jù);

      確定該數(shù)組的地址值是否包含在目標(biāo)圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值內(nèi);

      若是,則確定該數(shù)組為該目標(biāo)圖片對象的圖片數(shù)據(jù)緩存區(qū),并從該數(shù)組內(nèi)容數(shù)據(jù)中獲取目標(biāo)圖片對象的圖片內(nèi)容數(shù)據(jù);

      將當(dāng)前數(shù)組的內(nèi)存使用信息更新為下一個數(shù)組的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析的步驟,直到解析完所有數(shù)組的內(nèi)存使用信息。

      例如,在某個primitivearraydump解析后,可以得到該array的地址和array內(nèi)容數(shù)據(jù),若該array的地址包含bitmap對象b的mbuffer地址內(nèi),那么可以確定該array為bitmap對象b的圖片數(shù)據(jù)緩存區(qū),此時,便可以從該array內(nèi)容數(shù)據(jù)中獲取bitmap對象b的圖片內(nèi)容數(shù)據(jù)。

      (5)重復(fù)圖片確定單元305;

      重復(fù)圖片確定單元305,用于該多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。

      比如,從多個圖片對象中確定mwindth、mheight相同、且圖片內(nèi)容數(shù)據(jù)(這里是數(shù)組的大小以及數(shù)組各個數(shù)據(jù)位的值)相同的bitmap對象,這些bitmap對象對應(yīng)的圖片是同一圖片,因此,確定這些圖片為重復(fù)圖片。

      本實施例可以通過將圖片對象的尺寸值、圖片內(nèi)容數(shù)據(jù)進(jìn)行比較得到相同圖片對象,進(jìn)而確定重復(fù)圖片??蛇x地,為提高比較速度以及重復(fù)圖片確定速度,重復(fù)圖片確定單元305,可以具體用于:

      對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析,得到數(shù)組的地址值以及數(shù)組內(nèi)容數(shù)據(jù);

      確定該數(shù)組的地址值是否包含在目標(biāo)圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值內(nèi);

      若是,則確定該數(shù)組為該目標(biāo)圖片對象的圖片數(shù)據(jù)緩存區(qū),并從該數(shù)組內(nèi)容數(shù)據(jù)中獲取目標(biāo)圖片對象的圖片內(nèi)容數(shù)據(jù);

      將當(dāng)前數(shù)組的內(nèi)存使用信息更新為下一個數(shù)組的內(nèi)存使用信息,并返回執(zhí)行對當(dāng)前數(shù)組的內(nèi)存使用信息進(jìn)行解析的步驟,直到解析完所有數(shù)組的內(nèi)存使用信息。

      具體實施時,以上各個單元可以作為獨立的實體來實現(xiàn),也可以進(jìn)行任意組合,作為同一或若干個實體來實現(xiàn),以上各個單元的具體實施可參見前面的方法實施例,在此不再贅述。

      該重復(fù)圖片的檢測裝置具體集成在終端,如筆記本電腦、平板電腦等設(shè)備中。

      由上可知,本發(fā)明實施例通過文件獲取單元301獲取應(yīng)用進(jìn)程的內(nèi)存使用文件,該內(nèi)存使用文件包括:多個類的內(nèi)存使用信息、多個實例的內(nèi)存使用信息以及多個數(shù)組的內(nèi)存使用信息,然后,由偏移獲取單元302根據(jù)該類的內(nèi)使用信息獲取相應(yīng)圖片類的屬性的偏移,得到多個圖片類的屬性的偏移,其中,該屬性包括圖片數(shù)據(jù)緩存區(qū)和圖片尺寸,由屬性值獲取單元303根據(jù)該多個實例的內(nèi)存使用信息和該多個圖片類的屬性的偏移,獲取多個圖片對象的屬性值,該屬性值包括圖片數(shù)據(jù)緩存區(qū)地址值以及圖片尺寸值,由內(nèi)容獲取單元304根據(jù)多個圖片對象的圖片數(shù)據(jù)緩存區(qū)地址值與多個數(shù)組的內(nèi)存使用信息,獲取多個圖片對象的圖片內(nèi)容數(shù)據(jù);由重復(fù)圖片確定單元305從該多個圖片對象中確定圖片尺寸值相同、且圖片內(nèi)容數(shù)據(jù)相同的相同圖片對象,并確定相同圖片對象對應(yīng)的圖片為重復(fù)圖片。該方案可以自動檢測內(nèi)存中的重復(fù)圖片,無需人工處理,因此,可以提高重復(fù)圖片的檢測速度,進(jìn)而提高重復(fù)圖片的檢測效率。

      本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機(jī)可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:只讀存儲器(rom,readonlymemory)、隨機(jī)存取記憶體(ram,randomaccessmemory)、磁盤或光盤等。

      以上對本發(fā)明實施例所提供的一種重復(fù)圖片的檢測方法和裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。

      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1