新四季網

.net文件中命名空間的壓縮方法和裝置的製作方法

2023-05-28 10:43:11 3


專利名稱::.net文件中命名空間的壓縮方法和裝置的製作方法
技術領域:
:本發明涉及計算機應用領域,具體而言,涉及一種.net文件中命名空間的壓縮方法和裝置。
背景技術:
:.Net是微軟的新一代技術平臺,是全新的基於網際網路的跨語言軟體開發平臺,順應了當今軟體工業分布式計算、面向組件、企業級應用、軟體服務化和以Web為中心等大趨勢。.Net並非開發語言,但是在.Net開發平臺上可以支持多種開發語言,如C#語言丄++、VisualBasic、Jscript等。智慧卡是一種大小和普通名片相仿的塑料卡片,內含一塊直徑lcm左右的矽晶片,具有存儲信息和進行複雜運算的功能。它被廣泛地應用於電話卡、金融卡、身份識別卡以及行動電話、付費電視等領域。其中,智慧卡的晶片上,集成了微處理器、存儲器以及輸入/輸出單元等,使得智慧卡被認為是世界上最小的電子計算機。並且在智慧卡上,擁有一整套性能較強的安全保密控制機制,安全控制程序被固化在只讀存儲器中,因而具有無法複製密碼等可靠的安全保證。它較之普通磁卡,還具有信息存儲容量大,可利用微處理器來增加卡片功能等優點。.Net卡是一種含有可以運行.Net程序的.Net卡虛擬機的微處理器智慧卡。所謂虛擬機,是指可以把它想像成一臺用軟體來模擬的機器,在這臺機器裡有處理器、內存、寄存器等各種硬體,模擬運行各種指令,在這臺機器上運行的軟體對運行環境沒有特殊要求,所以虛擬機對在它上運行的程序來說是透明的。例如,x86虛擬機模擬的是x86指令程序的運行環境,c51虛擬機模擬的是c51指令程序的運行環境。.net程序包括命名空間、引用類型、定義類型、定義方法、引用方法、IL(IntermediateLanguage,中間語言)代碼等,其中命名空間是一種代碼組織的形式,在.net程序中通過名稱空間來管理不同的模塊,區別不同的代碼功能。但是目前的智慧卡由於體積和存儲晶片的限制,其存儲空間仍然有限,隨著軟體的發展,部分功能大的程序佔用存儲空間較大,對於很多的.net程序並不能進行存儲和運行。綜上所述,相關技術中的.net程序不能很好地在小容量的存儲介質(例如智慧卡)上存儲和運行,且針對該問題目前尚未提出有效的解決方案。
發明內容針對.net程序不能很好地在小容量的存儲介質(例如智慧卡)上存儲和運行而提出本發明,為此,本發明的主要目的在於提供一種.net文件中命名空間的壓縮方法和裝置,以解決上述問題至少之一。為了實現上述目的,根據本發明的一個方面,提供了一種.net文件中命名空間的壓縮方法。根據本發明的.net文件中命名空間的壓縮方法包括獲取.net文件中當前類型所屬的命名空間名稱;按照預先確定的算法對所述命名空間名稱進行壓縮;確定所述命名空間名稱對應的類型計數,所述類型計數是指在該命名空間中包括的類型的個數;按照預先確定的格式對壓縮後的所述命名空間名稱和所述類型計數進行組合,得到所述命名空間名稱對應的命名空間的壓縮結果。為了實現上述目的,根據本發明的另一方面,提供了一種.net文件中命名空間的壓縮裝置,所述裝置包括命名空間名稱獲取模塊,用於獲取.net文件中當前類型所屬的命名空間的命名空間名稱;壓縮模塊,用於按照預先確定的算法對所述命名空間名稱獲取模塊獲取的命名空間名稱進行壓縮;類型計數確定模塊,用於確定所述命名空間名稱獲取模塊獲取的命名空間名稱對應的類型計數,所述類型計數是指在該命名空間中包括的類型的個數;組合模塊,用於按照預先確定的格式對所述壓縮模塊壓縮後的所述命名空間名稱和所述類型計數確定模塊確定的類型計數進行組合,得到所述命名空間名稱對應的命名空間的壓縮結果。本發明採用對獲取到的命名空間名稱進行壓縮,並將壓縮後的命名空間名稱與對應的類型計數組合,得到壓縮後的命名空間,可以有效地降低.net文件佔用的存儲空間,使.net文件可以在小容量存儲介質(例如智慧卡)上存儲並運行,進而增強了小容量存儲介質(例如智慧卡)的功能。此處所說明的附圖用來提供對本發明的進一步理解,構成本申請的一部分,本發明的示意性實施例及其說明用於解釋本發明,並不構成對本發明的不當限定。在附圖中圖1是本發明實施例1提供的.net文件中命名空間的壓縮方法的流程圖2是本發明實施例2提供的.net文件中命名空間的壓縮方法的流程圖3是本發明實施例2提供的.net文件的結構的示意圖4是本發明實施例3提供的.net文件中命名空間的壓縮裝置的結構框圖。具體實施例方式下文中將參考附圖並結合實施例來詳細說明本發明。需要說明的是,在不衝突的情況下,本申請中的實施例及實施例中的特徵可以相互組合。下面結合附圖對技術方案的實施作進一步的詳細描述實施例1本實施例提供了一種.net文件中命名空間的壓縮方法,如圖l所示,該方法包括步驟S102,獲取.net文件中當前類型所屬的命名空間名稱;5優選的,本實施例中命名空間名稱的獲取方法可以具體為獲取.net文件中包含命名空間名稱偏移的元數據表;從上述元數據表中獲取上述當前類型所屬的命名空間名稱偏移,根據所述命名空間名稱的偏移在"#Strings"流中讀取命名空間名稱。其中,在.net文件中包含有多個表,其中包含命名空間名稱偏移的元數據表有定義類型或接口表TypeDef,引用類型表TypeRef。步驟S104,按照預先確定的算法對上述命名空間名稱進行壓縮;本實施例採用下述方法進行命名空間名稱的壓縮將上述命名空間名稱組成命名空間字符串;對該命名空間字符串進行散列運算得到散列值;取該散列值中預定的字節作為壓縮後的命名空間名稱。其中,散列運算採用的算法可以是MD5、SHA-1或SHA-2等。將上述命名空間名稱組成命名空間字符串包括使用連接符將.net文件的公鑰標記與命名空間名稱連接得到命名空間字符串。步驟S106,確定上述命名空間名稱對應的類型計數,其中,類型計數是指在該命名空間中包括的類型的個數;優選的,類型計數可以通過下述方法確定當上述命名空間名稱是第一次獲取時(即之前沒有獲取過此命名空間名稱),將上述命名空間名稱對應的類型計數置1,以後每獲取一次上述命名空間名稱,就將該類型計數加l,直至遍歷完上述元數據表。步驟S108,按照預先確定的格式對壓縮後的上述命名空間名稱和上述類型計數進行組合,得到上述命名空間名稱對應的命名空間的壓縮結果。其中,預先確定的格式可以為固定長度的字節,在此固定長度的字節中包含兩部分,一部分字節為上述類型計數,另一部分剩餘字節為上述壓縮後的命名空間名稱。優選的,上述獲取.net文件中當前類型所屬的命名空間名稱的步驟(步驟S102)之後還包括判斷當前獲取的上述命名空間名稱是否已被獲取過,如果沒有,執行上述步驟S104,如果上述命名空間名稱已被獲取過,將該命名空間的類型計數加1。優選的,本實施例提供的.net文件中命名空間的壓縮方法還可以包括判斷是否所有類型所屬的命名空間名稱都已經讀取到;如果是,執行上述按照預先確定的格式對壓縮後的上述命名空間名稱和上述類型計數進行組合的步驟(即,步驟S108);否則,讀取下一個類型所屬的命名空間名稱(即返回步驟S102)。本實施例採用對獲取到的命名空間名稱進行壓縮,並將壓縮後的命名空間名稱與對應的類型計數組合,得到壓縮後的命名空間,可以有效地降低.net文件佔用的存儲空間,使.net文件可以在小容量存儲介質(例如智慧卡)上存儲並運行,進而增強了小容量存儲介質(例如智慧卡)的功能。實施例2本實施例提供了一種.net文件中命名空間的壓縮方法,該方法中將經過.net平臺編譯後的未進行命名空間壓縮的文件稱為.net文件,並通過壓縮程序完成命名空間的壓縮過程。如圖2所示,該方法包括6步驟S202,獲取.net文件中包含命名空間名稱偏移的元數據表;在.net文件中包含有多個元數據表,其中包含命名空間名稱偏移的元數據表有TypeDef(定義類型、接口表)、TypeRef(引用類型表),下面以在.net文件中獲取元數據表TypeDef為例說明元數據表的獲取過程;本實施例以將下面的代碼編譯後的文件為例進行說明獲取其元數據表的方法}}publicclassClassB{}publicstructStructB{}}對上述代碼使用.net平臺編譯後得到helloworld.exe文件,並以二進位的形式存儲在硬碟上,該二進位文件為.net文件,.net文件結構如圖3所示,包括Dos頭(DosHeader)、PE特徵等。其中,壓縮程序獲取元數據表的過程如下a.壓縮程序定位.net文件的Dos頭,得到Dos頭0x5a4d;b.壓縮程序從Dos頭後跳過第一約定個字節,讀出PE特徵的偏移地址,得到PE特徵的偏移地址0x00000080;在本實施例中,第一約定個字節為0x003a個字節;c.壓縮程序根據PE特徵的偏移地址0x00000080定位PE特徵,定位得到PE特徵0x4550;d.從PE特徵開始,偏移第二約定個字節後讀取四個字節,在本實施例中,以32位機為例進行說明,第二約定個字節為從PE特徵向後偏移0x0074位元組後,讀出4個字節的數據為0x00000010,此值說明該二進位文件中存在0x10個目錄,且包含.net數據;其中,.net文件的元數據頭地址寫在上述第0x0F個目錄中,在64位機中第二約定個字節為0x0084個字節;e.從上述數據0x00000010向後偏移第三約定個字節後讀取八個字節數據,在本實施例中,優選地,第三預定個字節為112個字節,在此八個字節數據中,前四個字節為0x00002008,為.net數據頭的相對虛擬地址,後四個字節為0x00000048,為.net數據頭的namespaceMyCompany.MyOnCardApppublicclassMyService:MarshalByRefObjectstaticVersionver=newVersionQ,1,1,1);staticInt32callCo皿t=0;staticClassBclassb=newClassB;StringstrResult=Boolean.FalseString;publicStringMyS咖pleMethodStringstrHello=〃HelloWorld!〃;returnstrHello+callCoimt.ToString57長度;f.壓縮程序根據.net數據頭的相對虛擬地址得到線性地址0x00000208,並讀取.net數據頭得到如下數據48000000020005008C210000A0090000090000000500000600000000000000005020000080000000000000000000000000需要說明的是,上述數據採用小端的存儲方式,例如,上述數據前4個字節0x48000000為該數據的長度,轉換成大端的存儲方式為0x0000048;在本實施例中,線性地址為.net數據在.net文件中的地址,相對虛擬地址為相對於PE載入點的內存偏移,線性地址和相對虛擬地址的轉換關係為線性地址=相對虛擬地址_節的相對虛擬地址+節的文件偏移,在本實施例中,讀取.net文件中.net數據目錄的節的相對虛擬地址為0x00002000,節的文件偏移為0x00000200,則線性地址=0x00002008-0x00002000+0x00000200=0x00000208;g.壓縮程序由.net數據頭開始向後偏移第四約定個字節後讀出8個字節數據,在本實施例中第四約定個字節為從.net數據頭向後偏移8個字節後,讀取共8個字節數據,在這8個字節中,前四個字節為0x0000218c,為元數據頭(MetaDataHeader)的相對虛擬地址,後四個字節為0x000009a0,為元數據的長度;h.根據元數據頭的相對虛擬地址0x0000218c得到線性地址0x0000038c,根據線性地址和元數據長度得到元數據內容;i.壓縮程序由元數據頭向後讀取,當讀取到標誌"#"時,讀取標誌"#"前的八個字節,其中前四個字節為"#"的地址,通過該地址得到"#"流,在"#"流中第五約定個字節開始讀取長度為8個字節的數據,即0x0000000920021c57,其二進位形式為100100100000000000100001110001010111;在本實施例中,第五約定個字節為"#"流中起始位開始算起第9個字節;;j.將步驟i中得到的二進位數據從低位開始讀取,例如,第1位代表元數據表Module是否存在,如果是1,則證明存在元數據表Module,如果是0,證明不存在,在本實施例中,存在元數據表Module,並且第2位為1,表示元數據表TypeRef存在,第3位為1,表示元數據表TypeDef存在;其中,在步驟i中所得到的數據中,從低位開始,每一位代表.net文件中是否存在對應的表;k.壓縮程序在數據0x0000000920021c57後偏移第六約定個字節後讀取元數據表TypeDef的數據行數,在本實施例中為向後偏移16個字節後讀取4個字節,得到數據0x00000006,判斷得出元數據表TypeDef中存在6個數據行;其中,在元數據中,數據0x0000000920021c57向後偏移8個字節後的數據中,以每4個字節為一個單位依次存儲了在.net文件中存在的元數據表的數據行數,在表示數據行數的數據後,依次存儲了每個元數據表的具體內容,為元數據表區域;1.壓縮程序根據約定的規則讀取得到元數據表TypeDef的內容。其中,在本實施例中約定的規則如下,壓縮程序對數據0x0000000920021c57後記錄元數據表個數的數據依次進行讀取,即為0x00000001和Ox0000001d,相加後可以得出元數據表TypeDef前的兩個元數據表Module和TypeRef中共存在31個數據行,元數據表Module的數據行每行數據為10個字節,元數據表TypeRef中的數據行為每行6個字節,因此在元數據表區域中,向後偏移10*1+6*30=190個字節後,第191個字節開始為元數據表TypeDef的內容,元數據表TypeDef中的數據行每行為14個字節,因此元數據表TypeDef的長度為14*6=84個字節,得到元數據表TypeDef的數據如下00000000010000000000010001000100100019002300050001000100010010003900230009000600040001011000400023000D000600050001011000400023000D00060005000000000071020000090007000700上述數據中規定的字節標識不同信息,其中,每一行為元數據表TypeDef中的一個數據行,記錄了一個類型的名稱和屬性,對於每一行,從高位開始讀取,前4個字節為Flags(定義類型標識),5、6位元組為定義類型名稱相對於"ftStrings"流的偏移量,7、8位元組為該定義類型所屬的命名空間名稱相對於"ftStrings"流的偏移量,具體參見表1:表1tableseeoriginaldocumentpage9在本實施例中,元數據表TypeDef、TypeRef為類型表,上述類型表中包含有命名空間(namespace)信息,壓縮程序需從元數據表TypeDef、TypeRef中獲取命名空間信息。在本實施例中,命名空間的類型計數是指該命名空間中存在的類型個數,在壓縮程序開始執行壓縮操作前,設置所有命名空間的類型計數為0。在一個.net文件中,每個命名空間的類型計數是獨立的,即每個命名空間對應一個類型計數。步驟S204,壓縮程序讀取元數據表中的類型的命名空間名稱;本實施例以讀取元數據表TypeDef為例進行說明,例如,壓縮程序讀取上述元數據表TypeDef中第二個類型,按照上述元數據表的結構,讀出其所屬的命名空間的偏移量,即0x0023,其中,該命名空間的偏移量為相對於元數據中"ftStrings"流的偏移量,壓縮程序根據偏移量得到命名空間名稱的過程如下壓縮程序在元數據中定位"ftStrings"流的位置,並通過命名空間偏移量0x0023讀取命名空間信息,讀取過程中,由偏移地址0x0023讀起,遇到第一個0x00結束,得到命名空間名稱為4D79436F6D70616E792E4D794F6E4361726441707000上述命名空間對應的ASCII碼為MyCompany.MyOnCardA卯其中,壓縮程序每次只讀出一個類型的命名空間名稱;壓縮程序在元數據中定位"ftStrings"流的位置的方法為在步驟S202中的步驟h中獲得元數據頭的地址0x0000038c後,從元數據頭開始向後讀取,當發現標記""#Strings,,"後,讀取""ftStrings""的前8個字節,得到數據0x5C0300003C040000,其中高4個字節為"#Strings"流相對於元數據頭的偏移,低4個字節為"#Strings"流的長度,高4個字節轉換成大端的表示方式為0x0000035c,低4個字節轉換成大端的表示方式為0x0000043c;壓縮程序根據元數據頭的地址0x0000038c,向後偏移0x0000035c得到"ftStrings"流的數據區域;步驟S206,判斷所讀出的命名空間名稱是否與已經讀出過的類型所屬的命名空間重複,如果是,執行步驟S208,如果不是,執行步驟S210;由於步驟S204中壓縮程序讀出的為元數據表中第二個類型所屬的命名空間名稱,在本實施例中,元數據表TypeDef中第一個類型不存在命名空間名稱,因此不存在與已經讀出的類型所屬的命名空間重複的問題,繼續執行步驟S210及其之後的操作;步驟S208,將上述重複的命名空間的類型計數增加l,執行步驟S214;步驟S210,將命名空間名稱按約定的格式組成命名空間字符串;為了便於區別命名空間所屬的文件和降低數據的碰撞率,需要將步驟S204中得到的命名空間名稱按約定的格式組成命名空間字符串,在本實施例中,優選地,約定的命名空間字符串格式如表2所示表2PublicKeyToken連接符Namespace其中,PublicKeyToken為公鑰標記,在.net編譯器對HelloWorld程序進行強籤名時,會生成一個HelloWorld.snk文件,HelloWorld.snk中包含有公鑰和私鑰,上述HelloWorld代碼被編譯器編譯後得到PE文件,並對PE文件計算散列值,編譯器使用私鑰對上述散列值進行籤名,並將公鑰嵌入到PE文件中,嵌入的公鑰即為PublicKey,Pub1icKeyToken為對Pub1icKey進行散列運算,並取後八位所得到,在本實施例中,以PublicKeyToken是3805F8269D52A5B2為例,在本實施例中,優選地,連接符採用"."表示,由此得到命名空間字符串為3805F8269D52A5B2.MyCompany.MyOnCardApp;上述連接符還可以為"_"、"_"、空格等,並不局限於".";在本步驟中,還需將該命名空間名稱的類型計數置為l,用以表示該命名空間至少存在一個類型;10步驟S212,對命名空間字符串進行散列運算,並從中取約定的位數作為壓縮後的命名空間名稱;其中,進行散列運算可以採用MD5、SHA-1、SHA-2等算法,在本實施例中優選地採用MD5算法,對命名空間字符串"3805F8269D52A5B2.MyCompany.MyOnCardApp"進行散列計算得到一個120位的計算結果;在本實施例中,優選地,將此120的計算結果取前三個字節作為壓縮結果,為了使得數據字節對齊,還可以在最後補上"OO",得到壓縮後的命名空間名稱"ACE6EB00";上述壓縮後的命名空間名稱採用小端的方式排列,如採用大端的排列方式為00EBE6AC,一般在計算機中的存儲採用大端的方式排列,基於X86的智慧卡晶片中採用小端的方式排列;這裡需要說明的是,命名空間字符串中的PublicKeyToken需要區分大小寫,避免相同的PublicKeyToken因為大小寫的問題導致散列計算結果運算不一致問題;步驟S214,判斷是否所有類型所屬的命名空間名稱都已經被讀取過,如果是,執行步驟S216,如果不是,讀取下一個類型所屬的命名空間的命名空間名稱,S卩,返回步驟S204;判斷是否所有類型所屬的命名空間名稱都已經被讀取過的依據是看是否將元數據表中的所有行都讀完,如果都讀過,說明所有類型所屬的命名空間名稱都已經被讀取過,否則,說明不是所有類型所屬的命名空間名稱都被讀取過;步驟S216,壓縮程序按照約定的格式組織壓縮後的命名空間名稱和該命名空間的類型計數,得到命名空間的壓縮結果;在本實施例中,優選地,約定的格式,即經過壓縮程序壓縮後的命名空間的結構為表3類型計數命名空間名稱表3中的類型計數為該命名空間所包含的類型的類型計數;其中,在步驟S214中,當元數據表中包含的所有類型所屬的命名空間名稱都被讀出並壓縮完成後,可以得到所有的命名空間名稱的壓縮結果,並得到了所有命名空間所包含的類型的類型計數;以步驟S212中所得到的命名空間的壓縮結果為例進行說明,其中,命名空間MyCompany.MyOnCardA卯存在3個類型,可以得到壓縮後的命名空間如下0300ACE6EB00上述壓縮後的命名空間採取的是小端的表示方法。上述壓縮結果中命名空間的壓縮結構僅為最優的結構,該結構可以做相應的變換,例如將該命名空間的類型計數置於壓縮後的命名空間名稱後,或將類型計數的值進行同等編碼變換等,這裡不再詳述。本實施例對命名空間的壓縮過程,僅以讀取元數據表中的一個類型的命名空間進行了說明,在實際的操作過程中,一個.net文件中可能包含一個或多個命名空間,並且每個命名空間中包括多個類型,實際應用中應對元數據表中所有的類型逐個讀取對應的命名空間,取出其命名空間名稱,並對取出的不相同的命名空間名稱進行壓縮,同時對每個命名空間的類型進行類型計數,並按照上述方法得到壓縮後的命名空間。其中,對.net文件中元數據表中的每個類型對應的命名空間進行讀取時都可以採用本實施例提供的方法。下面給出對一個.net文件的命名空間壓縮後得到的結果Namespace:(0)0100D93DEB00〃367DB8A346085E5D.System.Runtime.Remoting(1)01006E880000〃367DB8A346085E5D.System.Runtime.Remoting.Channels(2)01001178D900〃367DB8A346085E5D.SmartCard.Runtime.Remoting.Channels.APDU(3)020000F64D00〃D9E1E811B0CFFB39.System(5)01001C5DD200〃367DB8A346085E5D.System(6)040000F64D00〃D9E1E811B0CFFB39.System(A)OIOO1C5DD200〃367DB8A346085E5D.System(B)0200C438E300〃CB18F1DFA0E7655B.MyCompany.MyOnCardApp(D)OIOO00F64D00〃D9E1E811B0CFFB39.System上述結果均採用小端的表示方式,例如第一條壓縮結果,OIOO為命名空間System.Runtime.Remoting所包含的類型的類型計數,即命名空間System.Runtime.Remoting包括0001個類型,即一個類型,後4個字節為該.net文件中對命名空間名稱System.Runtime.Remoting的壓縮結果,"〃"後為組成的命名空間字符串,以下(1)至(D)均採用的上述結構,不再一一解釋;本實施例提供的命名空間的壓縮方法,通過獲取命名空間名稱,並按照約定格式將其壓縮,可以對命名空間進行較好的壓縮,進而能夠節省存儲.net文件需要的空間,尤其對於將.net文件運行在智慧卡中,而該智慧卡的數據存儲又比較有限的情況下,可以通過本實施例提供的壓縮方法實現.net文件的運行,增強了智慧卡的性能。實施例3本實施例提供了一種.net文件中命名空間的壓縮裝置,如圖4所示,該裝置包括命名空間名稱獲取模塊302,用於獲取.net文件中當前類型所屬的命名空間名稱;優選的,本實施例中命名空間名稱獲取模塊302的獲取方法可以具體為獲取.net文件中包含命名空間名稱偏移的元數據表;從上述元數據表中獲取上述當前類型所屬的命名空間名稱。其中,在.net文件中包含有多個表,其中包含命名空間信息的元數據表有定義類型或接口表TypeDef,引用類型表TypeRef。壓縮模塊304,用於按照預先確定的算法對命名空間名稱獲取模塊302獲取的命名空間名稱進行壓縮;其中,預先確定的算法可以是先將上述命名空間名稱組成命名空間字符串;對該命名空間字符串進行散列運算得到散列值;取該散列值中預定的字節作為壓縮後的命名空間名稱。其中,散列運算採用的算法可以是MD5、SHA-1或SHA-2等。類型計數確定模塊306,用於確定命名空間名稱獲取模塊302獲取的命名空間名稱對應的類型計數,其中,類型計數是指在該命名空間中包括的類型的個數;優選的,類型計數確定模塊306可以通過下述方法確定命名空間的類型計數當上述命名空間名稱是第一次獲取時(即之前沒有獲取過此命名空間名稱),將上述命名空間名稱對應的類型計數置1,以後每獲取一次上述命名空間名稱,就將該類型計數加l,直至遍歷完上述元數據表。組合模塊308,用於按照預先確定的格式對壓縮模塊304壓縮後的命名空間名稱和類型計數確定模塊306確定的類型計數進行組合,得到命名空間名稱對應的命名空間的壓縮結果。其中,預先確定的格式可以為固定長度的字節,在此固定長度的字節中包含兩部分,一部分字節為上述類型計數,另一部分剩餘字節為上述壓縮後的命名空間名稱。其中,該類型計數可以位於上述壓縮後的命名空間名稱之前或之後。該類型計數可以採用二進位編碼、八進位編碼、十進位編碼、十六進位編碼或ASCII碼等。優選的,本實施例提供的.net文件中命名空間的壓縮裝置還可以包括判斷模塊,用於判斷命名空間名稱獲取模塊302是否將所有類型所屬的命名空間名稱都已經讀取到;如果是,觸發組合模塊308按照預先確定的格式對壓縮後的上述命名空間名稱和上述類型計數進行組合;否則,觸發命名空間名稱獲取模塊302讀取下一個類型所屬的命名空間名稱。本實施例的壓縮模塊304對命名空間名稱獲取模塊302獲取到的命名空間名稱進行壓縮,並且組合模塊308將壓縮後的命名空間名稱與類型計數確定模塊306確定的類型計數組合,得到壓縮後的命名空間,可以有效地降低.net文件佔用的存儲空間,使.net文件可以在小容量存儲介質(例如智慧卡)上存儲並運行,進而增強了小容量存儲介質(例如智慧卡)的功能。需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執行指令的計算機系統中執行,並且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同於此處的順序執行所示出或描述的步驟。此外,上述可執行指令可以存儲於存儲介質中,術語"存儲介質"可以表示用於存儲數據的一種或多種裝置,包括只讀存儲器(ROM)、隨機存取存儲器(RAM)、磁RAM、磁心存儲器、磁碟存儲介質、光存儲介質、快閃記憶體裝置和/或用於存儲信息的其他機器可讀介質。術語"機器可讀介質"包括但不限於可攜式或固定存儲裝置、光存儲裝置、無線通道或能夠存儲、容納、或承載指令和/或數據的各種其他介質。另外,可以通過硬體、軟體、固件、中間件、微碼、硬體描述語言或其組合來實現實施例。當用軟體、固件、中間件或微碼來實現時,可以在諸如存儲介質的機器可讀介質中存儲用於執行必要任務的程序代碼或碼段。(多個)處理器可以執行必要任務。碼段可以表示進程、函數、子程序、程序、例行程序、子例行程序、模塊、對象、軟體包、類、或指令、數據結構、或程序語言的任意組合。通過傳輸和/或接收信息、數據、自變量、或存儲內容來將碼段耦合到另一碼段或硬體電路。信息、自變量、參數、數據等可以經由包括存儲器共享、消息傳遞、令牌傳遞、網絡傳輸等的任意合適方式來傳遞、傳輸、或傳送。顯然,本領域的技術人員應該明白,上述的本發明的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執行的程序代碼來實現,從而,可以將它們存儲在存儲裝置中由計算裝置來執行,或者將它們分別製作成各個集成電路模塊,或者將它們中的多個模塊或步驟製作成單個集成電路模塊來實現。這樣,本發明不限制於任何特定的硬體和軟體結合。以上所述僅為本發明的優選實施例而已,並不用於限制本發明,對於本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。權利要求一種.net文件中命名空間的壓縮方法,其特徵在於,所述方法包括獲取.net文件中當前類型所屬的命名空間名稱;按照預先確定的算法對所述命名空間名稱進行壓縮;確定所述命名空間名稱對應的類型計數,所述類型計數是指在該命名空間中包括的類型的個數;按照預先確定的格式對壓縮後的所述命名空間名稱和所述類型計數進行組合,得到所述命名空間名稱對應的命名空間的壓縮結果。2.根據權利要求1所述的方法,其特徵在於,所述獲取.net文件中當前類型所屬的命名空間名稱的步驟之後還包括判斷當前獲取的所述命名空間名稱是否已被獲取過,如果沒有,執行所述按照預先確定的算法對所述命名空間名稱進行壓縮的步驟。3.根據權利要求1所述的方法,其特徵在於,所述獲取.net文件中當前類型所屬的命名空間名稱的步驟包括獲取.net文件中包含命名空間名稱偏移的元數據表;從所述元數據表中獲取所述當前類型所屬的命名空間名稱偏移;根據所述命名空間名稱偏移從"#Strings"流中讀取所述命名空間名稱。4.根據權利要求3所述的方法,其特徵在於,所述確定所述命名空間名稱對應的類型計數包括當所述命名空間名稱是第一次獲取時,將所述命名空間名稱對應的類型計數置1,以後每獲取一次所述命名空間名稱,將所述類型計數加l,直至遍歷完所述元數據表。5.根據權利要求3所述的方法,其特徵在於,所述元數據表包括定義類型或接口表TypeDef,引用類型表TypeRef。6.根據權利要求1所述的方法,其特徵在於,所述按照預先確定的算法對所述命名空間名稱進行壓縮的步驟包括將所述命名空間名稱組成命名空間字符串;對所述命名空間字符串進行散列運算得到散列值;取所述散列值中預定的字節作為壓縮後的所述命名空間名稱。7.根據權利要求6所述的方法,其特徵在於,所述將所述命名空間名稱組成命名空間字符串包括使用連接符將所述.net文件的公鑰標記與所述命名空間名稱連接得到命名空間字符串。8.根據權利要求6所述的方法,其特徵在於,所述散列運算採用的算法為MD5、SHA-1或SHA-2。9.根據權利要求1所述的方法,其特徵在於,所述方法還包括判斷是否所有類型所屬的命名空間名稱都已經讀取到;如果是,執行所述按照預先確定的格式對壓縮後的所述命名空間名稱和所述類型計數進行組合的步驟;否則,讀取下一個類型所屬的命名空間名稱。10.根據權利要求1所述的方法,其特徵在於,所述預先確定的格式為固定長度的字節,所述固定長度的字節的一部分字節為所述類型計數,剩餘字節為所述壓縮後的命名空間名稱。11.根據權利要求io所述的方法,其特徵在於,所述類型計數位於所述壓縮後的命名空間名稱之前。12.—種.net文件中命名空間的壓縮裝置,其特徵在於,所述裝置包括命名空間名稱獲取模塊,用於獲取.net文件中當前類型所屬的命名空間的命名空間名稱;壓縮模塊,用於按照預先確定的算法對所述命名空間名稱獲取模塊獲取的命名空間名稱進行壓縮;類型計數確定模塊,用於確定所述命名空間名稱獲取模塊獲取的命名空間名稱對應的類型計數,所述類型計數是指在該命名空間中包括的類型的個數;組合模塊,用於按照預先確定的格式對所述壓縮模塊壓縮後的所述命名空間名稱和所述類型計數確定模塊確定的類型計數進行組合,得到所述命名空間名稱對應的命名空間的壓縮結果。全文摘要本發明公開了一種.net文件中命名空間的壓縮方法和裝置,本發明的.net文件中命名空間的壓縮方法包括獲取.net文件中當前類型所屬的命名空間名稱;按照預先確定的算法對所述命名空間名稱進行壓縮;確定所述命名空間名稱對應的類型計數;按照預先確定的格式對壓縮後的所述命名空間名稱和所述類型計數進行組合,得到所述命名空間名稱對應的命名空間的壓縮結果。所述裝置包括命名空間名稱獲取模塊、壓縮模塊、類型計數確定模塊和組合模塊。通過對命名空間名稱進行壓縮,可以有效地降低.net文件佔用的存儲空間,使.net文件可以在小容量存儲介質(例如智慧卡)上存儲並運行。文檔編號G06F17/30GK101770368SQ20091024416公開日2010年7月7日申請日期2009年12月30日優先權日2009年12月30日發明者於華章,陸舟申請人:北京飛天誠信科技有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀