新四季網

一種智慧卡處理cap文件的方法

2023-06-24 09:54:31

專利名稱:一種智慧卡處理cap文件的方法
技術領域:
本發明涉及智慧卡領域,特別涉及ー種智慧卡處理CAP文件的方法。
背景技術:
智慧卡是指卡內嵌有微晶片的卡片。目前,智慧卡技術廣泛應用於身份識別、支付工具、加密/解密、信息技術等方面。但由於智慧卡平臺資源有限,如Java卡虛擬機平臺,在智慧卡中不能直接存儲類文件,在將Java程序類導入智慧卡設備之前,需要通過轉換裝置轉換成智慧卡特有的文件格式,即以CAP為後綴的壓縮文件。在現有技術中,智慧卡處理CAP文件規範中未根據各組件特點提供處理CAP文件中組件數據的方法,將CAP文件存儲在智慧卡中,然而,該方法存在的缺陷為佔用智慧卡大量的資源,増加存儲管理成本,降低CAP文件的下載速度,且不能保證CAP文件的完整性。

發明內容
為了實現在智慧卡下載並解析CAP文件時佔用內存資源少,提高CAP文件的下載速度和保證CAP文件在下載解析過程中的完整性,本發明提供了ー種智慧卡處理CAP文件的方法。1、ー種智慧卡處理CAP文件的方法,其特徵在幹,包括以下步驟A、智慧卡與外部終端建立連接,並進行初始化;B、所述智慧卡接收CAP文件對應的應用程式數據協議単元APDU命令,將所述APDU 命令包含的數據存儲到通信緩衝區;C、所述智慧卡對第一狀態標誌位的取值進行判斷,如果所述第一狀態標誌位的取值為第一預設值,則執行步驟D ;如果所述第一狀態標誌位的取值為第二預設值,則執行步驟E ;如果所述第一狀態標誌位的取值為第三預設值,則執行步驟F ;如果所述第一狀態標誌位的取值為第四預設值,則執行步驟G ;如果所述第一狀態標誌位的取值為第五預設值, 則執行步驟H ;如果所述第一狀態標誌位的取值為第六預設值,則執行步驟I ;如果所述第一狀態標誌位的取值為第七預設值,則執行步驟J ;如果所述第一狀態標誌位的取值為第八預設值,則執行步驟K ;如果所述第一狀態標誌位的取值為第九預設值,則執行步驟L ;如果所述第一狀態標誌位的取值為第十預設值,則執行步驟M ;D、所述智慧卡從所述通信緩衝區讀取頭組件數據;當所述智慧卡讀取且未處理的頭組件數據的大小與所述智慧卡讀取到的頭組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的頭組件數據進行處理;當所述智慧卡未讀取完頭組件包含的所有頭組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述頭組件包含的所有頭組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第二預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C;否則,返回步驟B;
E、所述智慧卡從所述通信緩衝區讀取目錄組件數據;當所述智慧卡讀取且未處理的目錄組件數據的大小與所述智慧卡讀取到的目錄組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的目錄組件數據進行處理;當所述智慧卡未讀取完目錄組件包含的所有目錄組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述目錄組件包含的所有目錄組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第三預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C;否則,返回步驟B;F、所述智慧卡從所述通信緩衝區讀取應用組件數據;當所述智慧卡讀取且未處理的應用組件數據的大小與所述智慧卡讀取到的應用組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的應用組件數據進行處理;當所述智慧卡未讀取完應用組件包含的所有應用組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述應用組件包含的所有應用組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第四預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;G、所述智慧卡從所述通信緩衝區讀取導入組件數據;當所述智慧卡讀取且未處理的導入組件數據的大小與所述智慧卡讀取到的導入組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的導入組件數據進行處理;當所述智慧卡未讀取完導入組件包含的所有導入組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述導入組件包含的所有導入組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第五預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C;否則,返回步驟B;H、所述智慧卡從所述通信緩衝區讀取類組件數據;當所述智慧卡未讀取完類組件包含的所有類組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡讀取完所述類組件包含的所有類組件數據時,所述智慧卡處理所述類組件,將所述第一狀態標誌位的取值修改為所述第六預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;I、所述智慧卡從所述通信緩衝區讀取方法組件數據;當所述智慧卡未讀取完方法組件包含的所有方法組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ; 當所述智慧卡讀取完所述方法組件包含的所有方法組件數據時,所述智慧卡處理所述方法組件,將所述第一狀態標誌位的取值修改為所述第七預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;J、所述智慧卡從所述通信緩衝區讀取靜態域組件數據;當所述智慧卡讀取且未處理的靜態域組件數據的大小與所述智慧卡讀取到的靜態域組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的靜態域組件數據進行處理;當所述智慧卡未讀取完所述靜態域組件包含的所有靜態域組件數據,且所述通信緩衝區不存在未被讀取的數據吋,返回步驟B;當所述智慧卡對所述靜態域組件包含的所有靜態域組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第八預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;K、所述智慧卡從所述通信緩衝區讀取導出組件數據;當所述智慧卡未讀取完導出
14組件包含的所有導出組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ; 當所述智慧卡讀取完所述導出組件包含的所有導出組件數據時,所述智慧卡處理所述導出組件,將所述第一狀態標誌位的取值修改為所述第九預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;L、所述智慧卡從所述通信緩衝區讀取常量池組件數據;當所述智慧卡未讀取完常量池組件包含的所有常量池組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述常量池組件包含的所有常量池組件數據時,所述智慧卡處理所述常量池組件,將所述第一狀態標誌位的取值修改為所述第十預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;M、所述智慧卡從所述通信緩衝區讀取位置引用組件數據;當所述智慧卡讀取且未處理的位置引用組件數據的大小與所述智慧卡讀取到的位置引用組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的位置引用組件數據進行處理;當所述智慧卡未讀取完所述位置引用組件包含的所有位置引用組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述位置引用組件包含的所有位置引用組件數據均處理完畢後,結束流程。2、如權利要求1所述的方法,其特徵在幹,所述智慧卡處理所述常量池組件之前, 還包括所述智慧卡從所述目錄組件中獲取所述常量池組件的大小信息,判斷所述常量池組件的大小是否大於隨機存儲器的可用存儲空間,如果大於所述可用存儲空間,則根據所述常量池組件的大小信息在非易失存儲器為所述常量池組件分配存儲空間;如果不大於所述可用存儲空間,則根據所述常量池組件的大小信息在所述隨機存儲器為所述常量池組件分配存儲空間;所述智慧卡處理所述常量池組件,包括所述智慧卡將所述常量池組件存儲到為所述常量池組件分配的存儲空間中;所述智慧卡更新所述常量池組件中的常量池表項數組元素。3、如權利要求2所述的方法,其特徵在幹,所述智慧卡更新所述常量池組件中的常量池表項數組元素之前,還包括所述智慧卡從所述常量池組件中獲取所述常量池表項數組的元素個數,將第一計數器的計數值設置為所述常量池表項數組的元素個數;所述智慧卡更新所述常量池組件中的常量池表項數組元素,包括步驟a、所述智慧卡從所述常量池組件中獲取ー個未解析的常量池表項數組元素, 根據獲取的當前元素的標籤判斷所述當前元素的類型,如果所述當前元素的類型為類引用,則執行步驟b ;如果所述當前元素的類型為實例引用,則執行步驟c ;如果所述當前元素的類型為父類方法引用,則執行步驟d;如果所述當前元素的類型為虛擬方法引用,則執行步驟f;如果所述當前元素的類型為靜態域引用,則執行步驟j ;如果所述當前元素的類型為靜態方法引用,則執行步驟k;步驟b、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包類標識,根據所述導入包類標識獲取導入包類虛擬機標識,使用所述導入包類虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;如果所述最高位不為1,則根據所述當前元素獲取包內類標識,根據所述包內類標識獲取包內類虛擬機標識,使用所述包內類虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;步驟C、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包類實例標識,根據所述導入包類標識獲取導入包類虛擬機標識,根據所述導入包類虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取導入包類引用標識,根據所述導入包類引用標識獲取導入包類實例的大小信息,使用所述導入包類實例的大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內類標識,根據所述包內類標識獲取包內類虛擬機標識,根據所述包內類虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取包內類引用標識,根據所述包內類引用標識獲取包內類實例的大小信息,使用所述包內類實例的大小信息替換所述常量池表項數組中的所述當前元素, 並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內類實例標識,根據所述包內類實例標識獲取包內類實例虛擬機標識,根據所述包內類實例虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取包內類實例引用標識,根據所述包內類實例引用標識獲取包內類實例引用的大小信息,使用所述包內類實例引用的大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟d、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位不為1, 則執行步驟e ;如果所述最高位為1,則執行步驟f ;步驟e、所述智慧卡根據所述當前元素獲取包內父類標識,根據所述包內父類標識獲取包內父類虛擬機標識,根據所述包內父類虛擬機標識獲取包內父類方法標識,根據所述包內父類方法標識獲取包內父類方法虛擬機標識,使用所述包內父類方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟f、所述智慧卡根據所述當前元素獲取導入包標識以及方法標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取當前導入包父類標識;步驟g、所述智慧卡根據所述當前導入包父類標識獲取所述導入包父類虛擬機標識,根據所述導入包父類虛擬機標識獲取方法表,根據所述方法表獲取方法表基數,判斷所述方法表基數是否小於等於所述方法標識,如果所述方法表基數小於所述方法標識,則執行步驟h ;如果所述方法表基數大於所述方法標識,則執行步驟i ;步驟h、所述智慧卡從所述方法表中獲取導入包父類方法虛擬機標識,使用所述導入包父類方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟i、所述智慧卡根據所述當前導入包父類標識獲取對應的導入包父類,從所述導入包父類中獲取所述導入包父類的父類的標識,判斷所述導入包父類的父類的標識是否為非法標識,如果所述導入包父類的父類的標識為所述非法標識,則返回步驟m ;如果所述導入包父類的父類的標識不是所述非法標識,則使用所述導入包父類的父類的標識替換所述當前導入包父類標識,並返回步驟g ;
步驟j、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1, 則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包靜態域標識,根據所述導入包靜態域標識獲取導入包靜態域虛擬機標識,使用所述導入包靜態域虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內靜態域標識,根據所述包內靜態域標識獲取包內靜態域虛擬機標識,使用所述包內靜態域虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟K所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1, 則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包靜態方法標識,根據所述導入包靜態方法標識獲取導入包靜態方法虛擬機標識,使用所述導入包靜態方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內靜態方法標識,根據所述包內靜態方法標識獲取包內靜態方法虛擬機標識,使用所述包內靜態方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟m、所述智慧卡將所述第一計數器的計數值減1,判斷所述第一計數器的計數值是否為零,如果所述計數值為零,則清空所述常量池組件中除所述常量池表項數組外的內容佔用的存儲空間;如果所述計數值不為零,則返回步驟a。4、如權利要求1所述的方法,其特徵在幹,所述智慧卡處理所述位置引用組件數據,包括所述智慧卡根據所述位置引用組件數據獲取常量池索引在所述方法組件中的偏移地址;所述智慧卡根據所述偏移地址獲取所述常量池索引,根據所述常量池索引獲取對應的常量池表項數組的內容;所述智慧卡使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述常量池索引。5、如權利要求4所述的方法,其特徵在幹,所述常量池索引包括第一常量池索引和第二常量池索引;所述智慧卡處理所述位置引用組件數據,包括①、所述智慧卡對第二狀態標誌位的取值進行判斷,如果所述第二狀態標誌位的取值為第十一預設值吋,則執行步驟②;如果所述第二狀態標誌位的取值為第十二預設值吋,則執行步驟③;如果所述第二狀態標誌位的取值為第十三預設值時,執行步驟④;如果所述第二狀態標誌位的取值為第十四預設值吋,執行步驟⑤;如果所述第二狀態標誌位的取值為第十五預設值吋,執行步驟⑥;如果所述第二狀態標誌位的取值為第十六預設值吋, 執行步驟⑦;②、所述智慧卡從所述位置引用組件數據中獲取單字節索引數組的元素個數的高字節,根據所述高字節設置第二計數器的計數值,將所述第二標誌位的取值修改為所述第十二預設值,並返回步驟①;
③、所述智慧卡從所述位置引用組件數據中獲取單字節索引數組的元素個數的低字節,根據所述低字節更新所述第二計數器的計數值,將所述第二標誌位的取值修改為所述第十三預設值,並返回步驟①;④、所述智慧卡從所述位置引用組件數據中獲取ー個未處理的單字節索引數組元素,根據所述單字節索引數組元素獲取第一常量池索引在所述方法組件內的偏移地址,根據所述偏移地址指向的地址存儲的所述第一常量池索引,獲取對應的常量池表項數組的內容,使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述第一常量池索引,將所述第二計數器的計數值減1,判斷所述第二計數器的計數值是否等於 0,如果所述第二計數器的計數值不等於0,則返回步驟①;如果所述第二計數器的計數值等於0,則將所述第二標誌位的取值修改為所述第十四預設值,並返回步驟①;⑤、所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組的元素個數的高字節,根據所述高字節設置第三計數器的計數值,將所述第二標誌位的取值修改為所述第十五預設值,並返回步驟①;⑥、所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組的元素個數的低字節,根據所述低字節更新所述第三計數器的計數值,將所述第二標誌位的取值修改為所述第十六預設值,並返回步驟①;⑦、所述智慧卡從所述位置引用組件數據中獲取ー個未處理的雙字節索引數組元素,根據所述雙字節索引數組元素獲取第二常量池索引在所述方法組件內的偏移地址,根據所述偏移地址指向的地址存儲的所述第二常量池索引,獲取對應的常量池表項數組的內容,使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述第 ニ常量池索引,將所述第三計數器的計數值減1,判斷所述第三計數器的計數值是否等於 0,如果所述第三計數器的計數值不等於0,則返回步驟①;如果所述第三計數器的計數值等於0,則確定對所述位置引用組件處理完畢。6、如權利要求5所述的方法,其特徵在幹,所述智慧卡從所述位置引用組件數據中獲取ー個未處理的單字節索引數組元素,包括所述智慧卡從所述位置引用組件數據中獲取單字節索引數組中的未處理的當前操作數據,判斷所述單字節索引數組中的所述當前操作數據是否小於255,如果所述單字節索引數組中的所述當前操作數據不小於255,則將第四計數器的計數值更新為所述第四計數器的當前計數值與255之和,並返回步驟①;如果所述單字節索引數組中的所述當前操作數據小於255,則將第四計數器的計數值更新為所述第四計數器的當前計數值與所述單字節索引數組中的所述當前操作數之和,將所述第四計數器的計數值作為所述未處理的單字節索引數組元素;所述智慧卡從所述位置引用組件數據中獲取ー個未處理的雙字節索引數組元素, 包括所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組中的未處理的當前操作數據,判斷所述雙字節索引數組中的所述當前操作數據是否小於255,如果所述雙字節索引數組中的所述當前操作數據不小於255,則將第五計數器的計數值更新為所述第五計數器的當前計數值與255之和,並返回步驟①;如果所述雙字節索引數組中的所述當前操作數據小於255,則將第五計數器的計數值更新為所述第五計數器的當前計數值與所述雙字節索引數組中的所述當前操作數之和,將所述第五計數器的計數值作為所述未處理的雙字節索引數組元素。7、ー種智慧卡處理CAP文件的方法,其特徵在幹,包括以下步驟A、智慧卡與外部終端建立連接,並進行初始化;B、所述智慧卡接收CAP文件對應的應用程式數據協議単元APDU命令,將所述APDU 命令包含的數據存儲到通信緩衝區;C、所述智慧卡對所述APDU命令中的狀態參數進行判斷,如果所述狀態參數的取值為第一預設值,則執行步驟D ;如果所述狀態參數的取值為第二預設值,則執行步驟E ;如果所述狀態參數的取值為第三預設值,則執行步驟F;如果所述狀態參數的取值為第四預設值,則執行步驟G ;如果所述狀態參數的取值為第五預設值,則執行步驟H ;如果所述狀態參數的取值為第六預設值,則執行步驟I ;如果所述狀態參數的取值為第七預設值,則執行步驟J ;如果所述狀態參數的取值為第八預設值,則執行步驟K ;如果所述狀態參數的取值為第九預設值,則執行步驟L ;如果所述狀態參數的取值為第十預設值,則執行步驟M ;D、所述智慧卡從所述通信緩衝區讀取頭組件數據;當所述智慧卡讀取且未處理的頭組件數據的大小與所述智慧卡讀取到的頭組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的頭組件數據進行處理;當所述智慧卡未讀取完頭組件包含的所有頭組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述頭組件包含的所有頭組件數據均處理完畢後,返回步驟B ;E、所述智慧卡從所述通信緩衝區讀取目錄組件數據;當所述智慧卡讀取且未處理的目錄組件數據的大小與所述智慧卡讀取到的目錄組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的目錄組件數據進行處理;當所述智慧卡未讀取完目錄組件包含的所有目錄組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述目錄組件包含的所有目錄組件數據均處理完畢後,返回步驟B ;F、所述智慧卡從所述通信緩衝區讀取應用組件數據;當所述智慧卡讀取且未處理的應用組件數據的大小與所述智慧卡讀取到的應用組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的應用組件數據進行處理;當所述智慧卡未讀取完應用組件包含的所有應用組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述應用組件包含的所有應用組件數據均處理完畢後,返回步驟B ;G、所述智慧卡從所述通信緩衝區讀取導入組件數據;當所述智慧卡讀取且未處理的導入組件數據的大小與所述智慧卡讀取到的導入組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的導入組件數據進行處理;當所述智慧卡未讀取完導入組件包含的所有導入組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述導入組件包含的所有導入組件數據均處理完畢後,返回步驟B ;H、所述智慧卡從所述通信緩衝區讀取類組件數據;當所述智慧卡未讀取完類組件包含的所有類組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述類組件包含的所有類組件數據時,所述智慧卡處理所述類組件,並返回步驟B;I、所述智慧卡從所述通信緩衝區讀取方法組件數據;當所述智慧卡未讀取完方法組件包含的所有方法組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡讀取完所述方法組件包含的所有方法組件數據時,所述智慧卡處理所述方法組件,並返回步驟B;J、所述智慧卡從所述通信緩衝區讀取靜態域組件數據;當所述智慧卡讀取且未處理的靜態域組件數據的大小與所述智慧卡讀取到的靜態域組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的靜態域組件數據進行處理;當所述智慧卡未讀取完靜態域組件包含的所有靜態域組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述靜態域組件包含的所有靜態域組件數據均處理完畢後,返回步驟B ;K、所述智慧卡從所述通信緩衝區讀取導出組件數據;當所述智慧卡未讀取完導出組件包含的所有導出組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B; 當所述智慧卡讀取完所述導出組件包含的所有導出組件數據時,所述智慧卡處理所述導出組件,並返回步驟B;L、所述智慧卡從所述通信緩衝區讀取常量池組件數據;當所述智慧卡未讀取完常量池組件包含的所有常量池組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述常量池組件包含的所有常量池組件數據時,所述智慧卡處理所述常量池組件,並返回步驟B ;M、所述智慧卡從所述通信緩衝區讀取位置引用組件數據;當所述智慧卡讀取且未處理的位置引用組件數據的大小與所述智慧卡讀取到的位置引用組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的位置引用組件數據進行處理;當所述智慧卡未讀取完位置引用組件包含的所有位置引用組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述位置引用組件包含的所有位置引用組件數據均處理完畢後,結束流程。8、如權利要求7所述的方法,其特徵在幹,所述智慧卡處理所述常量池組件之前, 還包括所述智慧卡從所述目錄組件中獲取所述常量池組件的大小信息,判斷所述常量池組件的大小是否大於隨機存儲器的可用存儲空間,如果大於所述可用存儲空間,則根據所述常量池組件的大小信息在非易失存儲器為所述常量池組件分配存儲空間;如果不大於所述可用存儲空間,則根據所述常量池組件的大小信息在所述隨機存儲器為所述常量池組件分配存儲空間;所述智慧卡處理所述常量池組件,包括所述智慧卡將所述常量池組件存儲到所述常量池組件分配的存儲空間中;所述智慧卡更新所述常量池組件中的常量池表項數組元素。9、如權利要求8所述的方法,其特徵在幹,所述智慧卡更新所述常量池組件中的常量池表項數組元素之前,還包括所述智慧卡從所述常量池組件中獲取所述常量池表項數組的元素個數,將第一計數器的計數值設置為所述常量池表項數組的元素個數;所述智慧卡更新所述常量池組件中的常量池表項數組元素,包括步驟a、所述智慧卡從所述常量池組件中獲取ー個未解析的常量池表項數組元素, 根據獲取的當前元素的標籤判斷所述當前元素的類型,如果所述當前元素的類型為類引
20用,則執行步驟b ;如果所述當前元素的類型為實例引用,則執行步驟c ;如果所述當前元素的類型為父類方法引用,則執行步驟d;如果所述當前元素的類型為虛擬方法引用,則執行步驟f ;如果所述當前元素的類型為靜態域引用,則執行步驟j ;如果所述當前元素的類型為靜態方法引用,則執行步驟k;步驟b、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包類標識,根據所述導入包類標識獲取導入包類虛擬機標識,使用所述導入包類虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內類標識,根據所述包內類標識獲取包內類虛擬機標識,使用所述包內類虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;步驟C、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包類標識,根據所述導入包類標識獲取導入包類虛擬機標識,根據所述導入包類虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取導入包類引用標識,根據所述導入包類引用標識獲取導入包類實例的大小信息,使用所述導入包類實例大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內類實例標識,根據所述包內類實例標識獲取包內類實例虛擬機標識,根據所述包內類實例虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取包內類實例引用標識,根據所述包內類實例引用標識獲取包內類實例引用的大小信息,使用所述包內類實例引用的大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟d、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位不為1, 則執行步驟e ;如果所述最高位為1,則執行步驟f ;步驟e、所述智慧卡根據所述當前元素獲取包內父類標識,根據所述包內父類標識獲取包內父類虛擬機標識,根據所述包內父類虛擬機標識獲取包內父類方法標識,根據所述包內父類方法標識獲取包內父類方法虛擬機標識,使用所述包內父類方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟f、所述智慧卡根據所述當前元素獲取導入包標識以及方法標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取當前導入包父類標識;步驟g、所述智慧卡根據所述當前導入包父類標識獲取所述導入包父類虛擬機標識,根據所述導入包父類虛擬機標識獲取方法表,根據所述方法表獲取方法表基數,判斷所述方法表基數是否小於等於所述方法標識,如果所述方法表基數小於所述方法標識,則執行步驟h ;如果所述方法表基數大於所述方法標識,則執行步驟i ;步驟h、所述智慧卡從所述方法表中獲取導入包父類方法虛擬機標識,使用所述導入包父類方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟i、所述智慧卡根據所述當前導入包父類標識獲取對應的導入包父類,從所述導入包父類中獲取所述導入包父類的父類的標識,判斷所述導入包父類的父類的標識是否為非法標識,如果所述導入包父類的父類的標識為所述非法標識,則返回步驟m ;如果所述導入包父類的父類的標識不是所述非法標識,則使用所述導入包父類的父類的標識替換所述當前導入包父類標識,並返回步驟g ;步驟j、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1, 則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包靜態域標識,根據所述導入包靜態域標識獲取導入包靜態域虛擬機標識,使用所述導入包靜態域虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內靜態域標識,根據所述包內靜態域標識獲取包內靜態域虛擬機標識,使用所述包內靜態域虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟K所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1, 則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包靜態方法標識,根據所述導入包靜態方法標識獲取導入包靜態方法虛擬機標識,使用所述導入包靜態方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內靜態方法標識,根據所述包內靜態方法標識獲取包內靜態方法虛擬機標識,使用所述包內靜態方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟m、所述智慧卡將所述第一計數器的計數值減1,判斷所述第一計數器的計數值是否為零,如果所述計數值為零,則清空所述常量池組件中除所述常量池表項數組外的內容佔用的存儲空間;如果所述計數值不為零,則返回步驟a。10、如權利要求7所述的方法,其特徵在幹,所述智慧卡處理所述位置引用組件數據,包括所述智慧卡根據所述位置引用組件數據,獲取常量池索引在所述方法組件中的偏移地址;所述智慧卡根據所述偏移地址獲取所述常量池索引,根據所述常量池索引獲取對應的常量池表項數組的內容;所述智慧卡使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述常量池索引。11、如權利要求10所述的方法,其特徵在幹,所述常量池索引包括第一常量池索引和第二常量池索引;所述智慧卡處理所述位置引用組件數據,包括①、所述智慧卡對第二狀態標誌位的取值進行判斷,如果所述第二狀態標誌位的取值為第十一預設值吋,則執行步驟②;如果所述第二狀態標誌位的取值為第十二預設值吋,則執行步驟③;如果所述第二狀態標誌位的取值為第十三預設值時,執行步驟④;如果所述第二狀態標誌位的取值為第十四預設值吋,執行步驟⑤;如果所述第二狀態標誌位的取值為第十五預設值吋,執行步驟⑥;如果所述第二狀態標誌位的取值為第十六預設值吋, 執行步驟⑦;②、所述智慧卡從所述位置引用組件數據中獲取單字節索引數組的元素個數的高字節,根據所述高字節設置第二計數器的計數值,將所述第二標誌位的取值修改為所述第十二預設值,並返回步驟①;③、所述智慧卡從所述位置引用組件數據中獲取單字節索引數組的元素個數的低字節,根據所述低字節更新所述第二計數器的計數值,將所述第二標誌位的取值修改為所述第十三預設值,並返回步驟①;④、所述智慧卡從所述位置引用組件數據中獲取ー個未處理的單字節索引數組元素,根據所述單字節索引數組元素獲取第一常量池索引在所述方法組件內的偏移地址,根據所述偏移地址指向的地址存儲的所述第一常量池索引,獲取對應的常量池表項數組的內容,使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述第一常量池索引,將所述第二計數器的計數值減1,判斷所述第二計數器的計數值是否等於 0,如果所述第二計數器的計數值不等於0,則返回步驟①;如果所述第二計數器的計數值等於0,則將所述第二標誌位的取值修改為所述第十四預設值,並返回步驟①;⑤、所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組的元素個數的高字節,根據所述高字節設置第三計數器的計數值,將所述第二標誌位的取值修改為所述第十五預設值,並返回步驟①;⑥、所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組的元素個數的低字節,根據所述低字節更新所述第三計數器的計數值,將所述第二標誌位的取值修改為所述第十六預設值,並返回步驟①;⑦、所述智慧卡從所述位置引用組件數據中獲取ー個未處理的雙字節索引數組元素,根據所述雙字節索引數組元素獲取第二常量池索引在所述方法組件內的偏移地址,根據所述偏移地址指向的地址存儲的所述第二常量池索引,獲取對應的常量池表項數組的內容,使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述第 ニ常量池索引,將所述第三計數器的計數值減1,判斷所述第三計數器的計數值是否等於 0,如果所述第三計數器的計數值不等於0,則返回步驟①;如果所述第三計數器的計數值等於0,則確定對所述位置引用組件處理完畢。12、如權利要求11所述的方法,其特徵在幹,所述智慧卡從所述位置引用組件數據中獲取ー個未處理的單字節索引數組元素,包括所述智慧卡從所述位置引用組件數據中獲取單字節索引數組中的未處理的當前操作數據,判斷所述單字節索引數組中的所述當前操作數據是否小於255,如果所述單字節索引數組中的所述當前操作數據不小於255,則將第四計數器的計數值更新為所述第四計數器的當前計數值與255之和,並返回步驟①;如果所述單字節索引數組中的所述當前操作數據小於255,則將第四計數器的計數值更新為所述第四計數器的當前計數值與所述單字節索引數組中的所述當前操作數之和,將所述第四計數器的計數值作為所述未處理的單字節索引數組元素;所述智慧卡從所述位置引用組件數據中獲取ー個未處理的雙字節索引數組元素, 包括所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組中的未處理的當前操作數據,判斷所述雙字節索引數組中的所述當前操作數據是否小於255,如果所述雙字節索引數組中的所述當前操作數據不小於255,則將第五計數器的計數值更新為所述第五計數器的當前計數值與255之和,並返回步驟①;如果所述雙字節索引數組中的所述當前操作數據小於255,則將第五計數器的計數值更新為所述第五計數器的當前計數值與所述雙字節索引數組中的所述當前操作數之和,將所述第五計數器的計數值作為所述未處理的雙字節索引數組元素。本發明的有益效果為通過本發明提供的ー種智慧卡處理CAP文件的方法,能夠有效的利用智慧卡存儲資源,提高CAP文件的下載速度和保證下載過程中CAP文件及智慧卡中內容的完整性。


圖1為本發明實施例1提供的ー種智慧卡處理CAP文件的方法流程圖;圖2為本發明實施例1提供的ー種處理頭組件數據的方法流程圖;圖3為本發明實施例1提供的ー種處理類組件數據的方法流程圖;圖4為本發明實施例2提供的另ー種智慧卡處理CAP文件的方法流程圖;圖5為本發明實施例2提供的另ー種處理頭組件數據的方法流程圖;圖6為本發明實施2提供的另ー種處理類組件數據的方法流程圖;圖7為本發明實施例3提供的ー種智慧卡下載並解析常量池組件的方法流程圖;圖8為本發明實施例4提供的ー種智慧卡下載並解析位置引用組件的方法流程圖。
具體實施例方式為使本發明的目的、技術方案和優點更加清楚,下面將結合附圖對本發明實施方式作進ー步地詳細描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。為了能夠有效的利用智慧卡系統中存儲資源,提高CAP文件的下載速度,本發明提供了ー種智慧卡處理CAP文件的方法。CAP文件由12個組件組成,具體為頭組件、目錄組件、應用組件、導入組件、類組件、方法組件、靜態域組件、導出組件、常量池組件、位置引用組件、描述符組件、調試組件。實施例1本發明實施例1提供了ー種智慧卡處理CAP文件的方法;下面結合圖1對所述方法進行介紹,具體步驟如下步驟101 智慧卡與外部終端建立連接,並進行初始化;優選地,在本實施例中,所述智慧卡進行初始化後第一狀態標誌位為0 ;步驟102 所述智慧卡接收CAP文件對應的應用程式數據協議単元APDU命令,將所述APDU命令包含的數據存儲到通信緩衝區;步驟103 所述智慧卡判斷第一狀態標誌位的取值,當所述第一狀態標誌位的取值為第一預設值,則執行步驟104 ;當所述第一狀態標誌位的取值為第二預設值,則執行步驟105 ;當所述第一狀態標誌位的取值為第三預設值,則執行步驟106 ;當所述第一狀態標誌位的取值為第四預設值,則執行步驟107 ;當所述第一狀態標誌位的取值為第五預設值,
24則執行步驟108 ;當所述第一狀態標誌位的取值為第六預設值,則執行步驟109 ;當所述第一狀態標誌位的取值為第七預設值,則執行步驟110 ;當所述第一狀態標誌位的取值為第八預設值,則執行步驟111 ;當所述第一狀態標誌位的取值為第九預設值,則執行步驟112 ; 當所述第一狀態標誌位的取值為第十預設值,則執行步驟113 ;優選地,在本實施例中,所述第一狀態標誌位的第一預設值為0 ;所述第一狀態標誌位的第二預設值為1 ;所述第一狀態標誌位的第三預設值為2 ;所述第一狀態標誌位的第四預設值為3 ;所述第一狀態標誌位的第五預設值為4 ;所述第一狀態標誌位的第六預設值為5 ;所述第一狀態標誌位的第七預設值為6 ;所述第一狀態標誌位的第八預設值為7 ;所述第一狀態標誌位的第九預設值為8 ;所述第一狀態標誌位的第十預設值為9 ;步驟104 所述智慧卡從通信緩衝區讀取頭組件數據並對頭組件數據進行處理, 下面結合圖2對頭組件數據處理方法進行介紹,具體步驟如下步驟11-1 所述智慧卡從所述通信緩衝區讀取頭組件數據,並根據頭組件數據中的第一字節長度設置第一計數器;在本實施例中,在CAP文件中組件數據採用TLV格式,TLV格式是ー種長度可變格式,組件數據的TLV格式如表1所示
表 1包括標籤(tag)、字節長度(length)、實際數據內容(value);標籤表示當前組件數據的類型,字節數是固定不變的;字節長度用於表示實際數據內容的長度,包括第一字節長度和第二字節長度,如上表1所示所述第一字節長度Ll表示整個組件數據所包含的數據大小信息,所述第二字節長度L2表示當前讀取的組件數據所包含的數據大小信息,所述字節長度的字節數也是固定不變的;所述實際數據內容根據字節長度的值確定字節數;所述第一計數器用於計量整個頭組件所包含的數據大小信息;步驟11-2 所述智慧卡根據當前讀取的頭組件數據中的第二字節長度設置第二計數器;在本實施例中,所述第二計數器用於計量當前讀取的頭組件數據所包含的數據大小信息;步驟11-3 所述智慧卡判斷所述智慧卡讀取且未處理的頭組件數據的大小與第 ニ計數器的計數是否匹配;是,則執行步驟11-4 ;否則執行步驟11-5 ;步驟11-4 所述智慧卡對未處理的頭組件數據的內容進行處理,並根據所處理頭組件數據的字節數對第一計數器和第二計數器進行相應的減操作,並判斷第一計數器的值是否為0,是則執行步驟11-6 ;否則執行步驟11-5 ;在本實施例中,第二計數器為0吋,確定當前讀取的頭組件數據處理完畢;第一計數器的計數為0吋,確定對頭組件數據處理完畢;具體地,所述頭組件數據可以包含的內容為包應用標識符、包版本號,也可以進一歩包含包名;處理所述頭組件數據的內容的具體操作步驟如下A-I 所述智慧卡從頭組件中獲取包應用標識符並創建包應用標識符對象;
A-2 所述智慧卡判斷所述頭組件中是否存在包名,是則執行步驟A-3 ;否則執行步驟A-4 ;A-3:所述智慧卡根據所述包名創建包名對象,生成包名對象引用;所述智慧卡創建包信息類並將所述包應用標識符對象、所述包版本號、包名對象引用寫入所述包信息類;在本實施例中,所述智慧卡在創建所述包名對象時產生所述包名對象引用;A-4:所述智慧卡創建包信息類並將所述包應用標識符對象、所述包版本號寫入所述包信息類;步驟11-5 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的頭組件數據; 是,則返回步驟11-1 ;否,則執行步驟102 ;步驟11-6 所述智慧卡將第一狀態標誌位的取值修改為第二預設值;步驟11-7 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,是,則執行步驟103 ;否,則執行步驟102 ;步驟105 所述智慧卡從通信緩衝區讀取目錄組件數據並進行處理,處理過程與圖2頭組件數據處理過程類似,區別是對組件數據的內容處理不同,具體步驟如下步驟12-1 所述智慧卡從所述通信緩衝區讀取目錄組件數據,並根據目錄組件數據中的第一字節長度設置第一計數器;在本實施例中,所述第一計數器用於計量整個目錄組件所包含的數據大小信息;步驟12-2 所述智慧卡根據當前讀取的目錄組件數據中的第二字節長度設置第 ニ計數器;在本實施例中,所述第二計數器用於計量當前讀取的目錄組件數據所包含的數據大小信息;步驟12-3 所述智慧卡判斷所述智慧卡讀取且未處理的目錄組件數據的大小與第二計數器的計數是否匹配;是則執行步驟12-4 ;否則執行步驟12-5 ;步驟12-4 所述智慧卡對未處理的目錄組件數據的內容進行處理,並根據所處理目錄組件數據的字節數對第一計數器和第二計數器進行相應的減操作,並判斷第一計數器的值是否為0,是則執行步驟12-6 ;否則執行步驟12-5 ;在本實施例中,第二計數器為0吋,確定當前讀取的目錄組件數據處理完畢;第一計數器的計數為0吋,確定對目錄組件數據處理完畢。具體地,處理所述目錄組件數據的內容的具體操作步驟如下步驟B-I 所述智慧卡根據目錄組件中12個組件的大小信息並創建目錄數組;步驟B-2 所述智慧卡將至少10個組件的大小信息存儲至所述目錄數組中;在本實施例中,所述智慧卡將頭組件、目錄組件、應用組件、導入組件、類組件、方法組件、靜態域組件、導出組件、常量池組件、位置引用組件的大小信息存儲至目錄數組中, 也可以進ー步存儲描述符組件和調試組件;步驟12-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的目錄組件數據;若存在,則從所述通信緩衝區繼續讀取目錄組件數據,並返回步驟12-2 ;若不存在,則執行步驟 102 ;步驟12-6 所述智慧卡將第一狀態標誌位的取值修改為第三預設值;
步驟12-7 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟103 ;如果不存在,則執行步驟102 ;步驟106 所述智慧卡從通信緩衝區讀取應用組件數據並進行處理,處理過程與圖2頭組件數據處理過程類似,區別是對組件數據的內容處理不同,具體步驟如下步驟13-1 所述智慧卡從所述通信緩衝區讀取應用組件數據,並根據應用組件數據中的第一字節長度設置第一計數器;在本實施例中,所述第一計數器用於計量整個應用組件所包含的數據大小信息;步驟13-2 所述智慧卡根據當前讀取的應用組件數據中的第二字節長度設置第 ニ計數器;在本實施例中,所述第二計數器用於計量當前讀取的應用組件數據所包含的數據大小信息;步驟13-3 所述智慧卡判斷所述智慧卡讀取且未處理的目錄組件數據的大小與第二計數器的計數是否匹配;若匹配,則執行步驟13-4 ;否則執行步驟13-5 ;步驟13-4 所述智慧卡對未處理的應用組件數據的內容進行處理,並根據所處理應用組件數據的字節數對第一計數器和第二計數器進行相應的減操作,並判斷第一計數器的值是否為0,是則執行步驟13-6 ;否則執行步驟13-5 ;在本實施例中,第二計數器為0吋,確定當前讀取的應用組件數據處理完畢;第一計數器的計數為0吋,確定對應用組件數據處理完畢。具體地,在本實施例中,所述應用組件中包含應用類數量和應用組件的應用標識符,處理所述應用組件的具體操作步驟如下C-I 所述智慧卡從應用組件中獲取應用類數量和應用組件的應用標識符,並根據應用組件的應用標識符創建應用組件的應用標識符對象,生成應用標識符對象引用C-2 所述智慧卡將應用標識符對象引用寫入所述包信息類;步驟13-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的應用組件數據;若存在,則從所述通信緩衝區繼續讀取應用組件數據,並返回步驟13-2 ;若不存在,則執行步驟 102 ;步驟13-6 所述智慧卡將第一狀態標誌位的取值修改為第四預設值;步驟13-7 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟103 ;如果不存在,則執行步驟102 ;步驟107 所述智慧卡從通信緩衝區讀取導入組件數據並進行處理,處理過程與圖2頭組件數據處理過程類似,區別是對組件數據的內容處理不同,具體步驟如下步驟14-1 所述智慧卡從所述通信緩衝區讀取導入組件數據,並根據導入組件數據中的第一字節長度設置第一計數器;在本實施例中,所述第一計數器用於計量整個導入組件所包含的數據大小信息;步驟14-2 所述智慧卡根據當前讀取的導入組件數據中的第二字節長度設置第 ニ計數器;在本實施例中,所述第二計數器用於計量當前讀取的導入組件數據所包含的數據大小信息;步驟14-3 所述智慧卡判斷所述智慧卡讀取且未處理的導入組件數據的大小與第二計數器的計數是否匹配;若匹配,則執行步驟14-4 ;否則執行步驟14-5 ;步驟14-4 所述智慧卡對未處理的導入組件數據的內容進行處理,並根據所處理導入組件數據的字節數對第一計數器和第二計數器進行相應的減操作,並判斷第一計數器的值是否為0,是則執行步驟14-6 ;否則執行步驟14-5 ;在本實施例中,第二計數器為0吋,確定當前讀取的導入組件數據處理完畢;第一計數器的計數為0吋,確定對導入組件數據處理完畢。具體地,處理所述導入組件的具體操作步驟如下D-I 所述智慧卡從導入組件中獲取導入包的相關信息;在本實施例中,所述導入組件包括多個導入包的相關信息,所述導入包的相關信息可以包含導入包應用標識符、導入包序號,也可以進一歩包含導入包包名;每個導入包標識對應ー個導入包序號,每個導入包序號對應ー個導入包;D-2 所述智慧卡創建導入數組;D-3:所述智慧卡從未解析的導入包的相關信息中獲取導入包序號並存儲至所述導入數組;D-4 所述智慧卡判斷是否存在未解析的導入包的相關信息,是則返回步驟D-3 ; 否則確定對導入組件處理完畢;步驟14-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的導入組件數據;若存在,則從所述通信緩衝區繼續讀取導入組件數據,並返回步驟14-2 ;若不存在,則執行步驟 102 ;步驟14-6 所述智慧卡將第一狀態標誌位的取值修改為第四預設值;步驟14-7 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟103 ;如果不存在,則執行步驟102 ;步驟108 所述智慧卡從通信緩衝區讀取類組件數據並進行處理,下面結合圖3對類組件數據的處理方法進行介紹,具體步驟如下步驟15-1 所述智慧卡從所述目錄數組中獲取類組件的大小信息,根據類組件的大小為所述類組件分配第一存儲地址段,並從所述通信緩衝區讀取類組件數據,將類組件數據存儲至所述第一存儲地址段;步驟15-2 所述智慧卡判斷是否讀取完所述類組件包含的類組件數據,是則執行步驟15-3 ;否則返回步驟102 ;本實施例中,所述第一存儲地址段存滿表示所述類組件包含的類組件數據已讀取完畢;所述類組件是程序執行的核心,包含CAP文件的所有接ロ信息和類信息,所述接ロ信息和類信息統稱為類組件単元信息;步驟15-3 智慧卡對類組件進行處理,確定類組件處理完畢,所述智慧卡將第一狀態標誌位的取值修改為第六預設值;具體地,所述類組件的具體步驟如下E-I 所述智慧卡通過類組件単元信息標識位判斷所述類組件単元信息是否為接 ロ信息,是則執行步驟E-2 ;否則執行步驟E-3 ;優選地,在本實施例中,所述類組件単元信息標識位為1時表示所述類組件単元信息為所述接ロ信息,所述類組件単元信息標識位為0時表示所述類組件単元信息為所述類信思;E-2 所述智慧卡處理所述接ロ信息;E-3 所述智慧卡處理所述類信息;步驟15-4 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟103 ;如果不存在,則執行步驟102 ;步驟109 所述智慧卡從通信緩衝區讀取方法組件數據並進行處理,方法組件處理過程與類組件處理過程類似,區別是對組件數據的內容處理不同,具體步驟如下步驟16-1 所述智慧卡從所述目錄數組中獲取方法組件的大小信息,根據方法組件的大小為所述方法組件分配第二存儲地址段,並從所述通信緩衝區讀取方法組件數據, 並將方法組件數據存儲至所述第二存儲地址段;步驟16-2 所述智慧卡判斷是否讀取完所述方法組件包含的方法組件數據,是則對清空所述方法組件中的異常信息,並執行步驟16-3 ;否則返回步驟102 ;本實施例中,所述第一存儲地址段存滿表示所述方法組件包含的方法組件數據已讀取完畢;步驟16-3 所述智慧卡將第一狀態標誌位的取值修改為第七預設值;步驟16-4 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟103 ;如果不存在,則執行步驟102 ;步驟110 所述智慧卡從通信緩衝區讀取靜態域組件數據並進行處理,處理過程與頭組件數據過程類似,區別是組件數據的內容處理不同,具體步驟如下步驟17-1 所述智慧卡從所述通信緩衝區讀取靜態域組件數據,並根據靜態域組件數據中的第一字節長度設置第一計數器;在本實施例中,所述第一計數器用於計量整個靜態域組件所包含的數據大小信息;步驟17-2 所述智慧卡根據當前讀取的靜態域組件數據中的第二字節長度設置第二計數器;在本實施例中,所述第二計數器用於計量當前讀取的靜態域組件數據所包含的數據大小信息;步驟17-3 所述智慧卡判斷所述智慧卡讀取且未處理的靜態域組件數據的大小與第二計數器的計數是否匹配;若匹配,則執行步驟17-4 ;否則執行步驟17-5 ;步驟17-4 所述智慧卡對未處理的靜態域組件數據的內容進行處理,井根據所處理靜態域組件數據的字節數對第一計數器和第二計數器進行相應的減操作,並判斷第一計數器的值是否為0,是則執行步驟17-6 ;否則執行步驟17-5 ;在本實施例中,第二計數器為0吋,確定當前讀取的靜態域組件數據的內容處理完畢;第一計數器的計數為0時,確定對靜態域組件數據處理完畢。具體地,處理靜態域組件的內容的具體操作步驟如下G-I 所述智慧卡從所述目錄組件中獲取所述靜態域組件的大小信息,井根據所述靜態域組件的大小為所述靜態域組件分配第三存儲地址段;G-2 所述智慧卡將所述靜態域組件存儲至所述第三存儲地址段;G-3 所述智慧卡創建靜態數組並對所述靜態數組進行初始化;
優選地,在本實施例中,所述智慧卡使用預設值(0)來初始化靜態數組;G-4 所述智慧卡清除未初始化的靜態數組;步驟17-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的靜態域組件數據; 若存在,則從所述通信緩衝區繼續讀取靜態域組件數據,並返回步驟13-2 ;若不存在,則執行步驟102 ;步驟17-6 所述智慧卡將第一狀態標誌位的取值修改為第八預設值;步驟17-7 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟103 ;如果不存在,則執行步驟102 ;步驟111 所述智慧卡從通信緩衝區讀取導出組件數據並進行處理,導出組件處理過程與類組件處理過程類似,區別是對組件數據的內容處理不同,具體步驟如下步驟18-1 所述智慧卡從所述目錄數組中獲取導出組件的大小信息,根據方法組件的大小為所述導出組件分配第四存儲地址段,並從所述通信緩衝區讀取導出組件數據, 並將導出組件數據存儲至所述第四存儲地址段;步驟18-2 所述智慧卡判斷是否讀取完所述導出組件包含的導出組件數據,是則對所述導出組件進行處理,並執行步驟18-3 ;否則返回步驟102 ;具體地,處理所述導出組件的具體操作步驟如下所述導出組件包含類偏移地址、靜態域偏移數組、靜態方法偏移數組;H-I 所述Java為所述類偏移地址分配虛擬機標識;H-2 所述智慧卡從所述靜態域偏移數組中獲取靜態域的偏移地址,根據所述靜態域的偏移地址得到靜態域引用,並為所述靜態域引用分配虛擬機標識;H-3:所述智慧卡從靜態方法偏移數組中獲取靜態常量池索引的偏移地址,根據所述靜態常量池索引的偏移地址得到靜態方法引用,並為所述靜態方法引用分配虛擬機標識;步驟18-3 所述智慧卡將第一狀態標誌位的取值修改為第九預設值;步驟18-4 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟103 ;如果不存在,則執行步驟102 ;步驟112 所述智慧卡從通信緩衝區讀取常量池組件數據並進行處理,具體處理步驟如下步驟19-1 所述智慧卡從所述目錄數組中獲取常量池組件的大小信息,並判斷是否小於第一存儲器的存儲空間,是則從所述通信緩衝區讀取常量池組件數據並將常量池組件數據存儲至第一存儲器中;否則從所述通信緩衝區讀取常量池組件數據並將所述常量池組件數據存儲至第二存儲器中;在本實施例中,所述第一存儲器為隨機存儲器,第二存儲器為非易失性存儲器;步驟19-2 所述智慧卡判斷是否讀取完所述常量池組件包含的常量池組件數據, 是則對所述導出組件進行處理,並執行步驟19-3 ;否則返回步驟102 ;具體地,處理所述常量池組件的操作步驟為I-I 所述智慧卡從所述常量池組件中獲取常量池表項數組的元素個數,並將第三計數器的計數值設置為所述常量池表項數組的元素個數;在本實施例中,所述第三計數器用於計量常量池表項數組的元素個數;
1-2 所述智慧卡從常量池組件中獲取所述常量池表項數組元素,並根據常量池表項數組當前元素的標籤判斷所述常量池表項數組當前元素的類型;在本實施例中,所述常量池表項數組的元素類型包括類引用、實例引用、父類方法引用、靜態域引用、靜態方法引用;優選地,在本實施例中,所述常量池表項數組當前元素的第一個字節表示所述常量池表項數組當前元素的標籤;1-3 所述智慧卡根據所述常量池表項數組元素的類型執行相應操作,具體見實施例3解析常量池組件的方法,在此不贅述;1-4 所述智慧卡對第三計數器的計數值執行減1操作;在本實施例中,所述智慧卡對所述第三計數器的計數值執行減1操作後,所述第三計數器的計數值表示所述常量池表項數組中未解析的元素個數;1-5 所述智慧卡判斷第三計數器的計數值是否等於0,是則確定對常量池組件解析完畢;否則返回步驟1-2 ;步驟19-3 所述智慧卡將第一狀態標誌位的取值修改為第十預設值;步驟19-4 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟103 ;如果不存在,則執行步驟102 ;步驟113 所述智慧卡從通信緩衝區讀取位置引用組件數據並進行處理,具體處理步驟如下步驟110-1 所述智慧卡從所述通信緩衝區中讀取位置引用組件的當前操作數據;在本實施例中,所述位置引用的操作數據包含的信息為單字節索引數組元素個數的高字節、單字節索引數組元素個數的低字節、單字節索引數組的元素、雙字節索引數組元素個數的高字節、雙字節索引數組元素個數的低字節、雙字節索引數組的元素;步驟110-2 所述智慧卡處理所述位置引用組件的當前操作數據;具體地,處理所述位置引用組件的當前操作數據的具體操作為判斷第二狀態標誌位的取值並執行相應的操作;在本實施例中,所述第二狀態標誌位的取值包括第十一預設值、第十二預設值、 第十三預設值、第十四預設值、第十五預設值、第十六預設值;優選地,在本實施例中,第二狀態標誌位的第十一預設值為0 ;第二狀態標誌位的第十二預設值為1 ;第二狀態標誌位的第十三預設值為2 ;第二狀態標誌位的第十四預設值為3 ;第二狀態標誌位的第十五預設值為4 ;第二狀態標誌位的第十六預設值為5 ;當第二狀態標誌位的取值為第十一預設值,所述智慧卡根據位置引用組件得到單字節索引數組元素個數的高字節並進行相應處理;具體地,所述智慧卡設置第三計數器井清空位置引用組件的當前操作數據;所述智慧卡將第二卡片狀態設置為第二狀態並返回步驟110-1 ;優選地,在本實施例中,所述智慧卡根據所述單字節索引數組的元素個數的高字節設置第三計數器;當第二狀態標誌位的取值為第十二預設值,所述智慧卡根據當前操作數據得到單字節索引數組元素個數的低字節並進行相應處理;20/34 頁具體地,所述智慧卡重置第三計數器井清空位置引用組件的當前操作數據;所述智慧卡將第二卡片狀態設置為第三狀態並返回步驟110-1 ;優選地,在本實施例中,所述智慧卡重置所述第三計數器的具體操作為所述智慧卡將所述第三計數器的計數值左移八位後得到的值與單字節索引數組元素個數的低字節的值相加;當第二狀態標誌位的取值為第十三預設值,所述智慧卡根據位置引用組件得到單字節索引數元素並進行相應處理;所述智慧卡處理單字節索引數組元素的具體操作為00-1 所述智慧卡判斷所述位置引用組件的當前操作數據的值是否等於255,是則執行步驟00-2 ;否則執行步驟00-3 ;在本實施例中,所述操作數據的值的範圍為0 255 ;當所述智慧卡處於第三狀態時,從位置引用組件中讀取單字節索引數組元素,即常量池索引常量池索引在方法組件內的偏移地址;00-2 所述智慧卡重置第四計數器並返回步驟110-1 ;在本實施例中,所述第四計數器用來計量第一常量池索引在方法組件內的偏移地址,所述第四計數器的初始計數值為0 ;所述智慧卡重置所述第四計數器的具體操作為所述智慧卡將第四計數器的當前計數值與255相加;00-3:所述智慧卡將第四計數器的計數值設置為第四計數器的當前計數值與當前操作數據值之和,00-4:所述智慧卡根據所述第一常量池索引在方法組件內的偏移地址得到第一常量池表項數組的內容;在本實施例中,所述第一常量池索引在方法組件內的偏移地址指向的地址中存儲的是第一常量池索引,所述第一常量池索引的地址中存儲的是第一常量池表項數組的內容;00-5:所述智慧卡用第一常量池表項的內容替換所述第一常量池索引在方法組件內的偏移地址指向的地址中的內容,即所述第一常量池索引的地址;00-6 所述智慧卡對所述第三計數器的計數值執行減1操作;在本實施例中,所述智慧卡對所述第三計數器的計數值執行減1操作後,所述第三計數器的計數值表示所述單字節索引數組中未解析的元素個數;00-7 所述智慧卡判斷所述第三計數器的計數值是否等於0,是則執行步驟00-8 ; 否則返回步驟110-1 ;00-8 所述智慧卡將第二卡片狀態設置為第四狀態,返回步驟110-1 ;當第二卡片狀態處於第四狀態時;所述智慧卡根據位置引用組件的當前操作數據得到雙字節索引數組元素個數的高字節並進行相應處理;具體地,所述智慧卡重置第三計數器井清空位置引用組件的當前操作數據;所述智慧卡將第二卡片狀態設置為第五狀態並返回步驟110-1 ;優選地,所述智慧卡根據所述單字節索引數組長度高字節重置第三計數器;當第二卡片狀態處於第五狀態時,所述智慧卡根據當操作數據得到雙字節索引數組元素個數的低字節並進行相應處理;
32
具體地,所述智慧卡重置第三計數器井清空位置引用組件的當前操作數據;所述智慧卡將第二卡片狀態設置為第六狀態並返回步驟110-1 ;當第二卡片狀態處於第六狀態時,所述智慧卡根據當前操作數據得到雙字節索引數組元素並進行相應處理;所述智慧卡執行的相應操作具體為01-1 所述智慧卡判斷位置引用組件的當前操作數據的值是否等於255,是則執行步驟01-2 ;否則執行步驟01-3 ;在本實施例中,所述操作數據的值的範圍為0 255 ;當所述智慧卡處於第六狀態時,從位置引用組件中雙字節索引數組元素,即第二常量池索引在方法組件內的偏移地址;01-2 所述智慧卡重置第四計數器並返回步驟110-1 ;在本實施例中,所述第四計數器用來計量第二常量池索引在方法組件內的偏移地址;所述智慧卡重置第四計數器的具體操作為所述智慧卡將第四計數器的當前計數值與 255相加;01-3:所述智慧卡將第四計數器的計數值設置為第四計數器的當前計數值與位置弓I用組件的當前操作數據值之和,01-4:所述智慧卡根據所述第二常量池索引在方法組件內的偏移地址得到第二常量池索引的內容;在本實施例中,所述第二常量池索引在方法組件內的偏移地址指向的地址中存儲的是第二常量池索引地址,所述第二常量池索引的地址中存儲的是第二常量池表項的內容;01-5:所述智慧卡用所述第二常量池表項的內容替換所述第二常量池索引在組件內的偏移地址指向的地址中的內容;01-6 所述智慧卡對所述第三計數器的計數值執行減1操作;在本實施例中,所述智慧卡對所述第三計數器的計數值執行減1操作後,所述第三計數器的計數值表示所述雙字節索引數組中未解析的元素個數;01-7 所述智慧卡判斷所述第三計數器的計數值是否等於0,是則確定完成位置引用組件下載解析過程;否則返回執行步驟110-1。優選地,在本實施例中,還可在處理組件數據後清空當前組件數據。實施例2本發明實施例2提供了另ー種智慧卡處理CAP文件的方法,下面結合圖4對所述方法進行介紹,具體步驟如下步驟401 智慧卡與外部中斷建立連接,並進行初始化;步驟402 所述智慧卡接收CAP文件對應的應用程式數據協議単元APDU命令,將所述APDU命令包含的數據存儲到通信緩衝區;步驟403 所述智慧卡對所述APDU命令中的狀態參數進行判斷,如果所述狀態參數的取值為第一預設值,則執行步驟404 ;如果所述狀態參數的取值為第二預設值,則執行步驟405 ;如果所述狀態參數的取值為第三預設值,則執行步驟406 ;如果所述狀態參數的取值為第四預設值,則執行步驟407 ;如果所述狀態參數的取值為第五預設值,則執行步驟408 ;如果所述狀態參數的取值為第六預設值,則執行步驟409 ;如果所述狀態參數的取值為第七預設值,則執行步驟410 ;如果所述狀態參數的取值為第八預設值,則執行步驟411 ; 如果所述狀態參數的取值為第九預設值,則執行步驟412 ;如果所述狀態參數的取值為第十預設值,則執行步驟413;優選地,在本實施例中,所述狀態參數的第一預設值為0 ;所述狀態參數的第二預設值為1 ;所述狀態參數的第三預設值為2 ;所述狀態參數的第四預設值為3 ;所述狀態參數的第五預設值為4 ;所述狀態參數的第六預設值為5 ;所述狀態參數的第七預設值為6 ; 所述狀態參數的第八預設值為7 ;所述狀態參數的第九預設值為8 ;所述狀態參數的第十預設值為9 ;步驟404 所述智慧卡從通信緩衝區讀取頭組件數據並進行處理,下面結合圖5對頭組件數據的處理方法進行介紹,具體步驟如下步驟41-1 所述智慧卡從所述通信緩衝區讀取頭組件數據,並根據當前讀取的頭組件數據中的第二字節長度設置第二計數器;在本實施例中,CAP文件中組件數據通過外部轉化器被轉換為符合IS07816-3的應用程式數據協議単元APDU命令,並採用另ー種TLV格式,ADPU命令的另ー種TLV格式如表2所示
T1VVT2しし表2包括開始標籤(tagl)、字節長度(length)、實際數據內容(value)、結束標籤 (tag2);開始標籤表示當前組件數據的類型,通過參數Pl的值確定當前組件數據的類型, 字節數是固定不變的;字節長度表示當前讀取的組件數據所包含的數據大小信息,所述字節長度的字節數也是固定不變的;實際數據內容的字節數是可變的;結束標籤表示確定當前類型的組件數據傳輸完畢。所述頭組件數據可以包含的內容為包應用標識符、包版本號,也可以進一歩包含包名;所述第二計數器用於計量當前讀取的頭組件數據所包含的數據大小信息;步驟41-2 所述智慧卡判斷所述智慧卡讀取且未處理的頭組件數據的大小與第 ニ計數器的計數是否匹配;是,則執行步驟41-3 ;否則執行步驟41-4 ;步驟41-3 所述智慧卡對未處理的頭組件數據的內容進行處理,並根據所處理頭組件數據的字節數對第二計數器進行相應的減操作;在本實施例中,第二計數器為0吋,確定當前讀取的頭組件數據的內容處理完畢;具體地,處理所述頭組件數據的內容的具體操作步驟如下A-I 所述智慧卡從頭組件中獲取包應用標識符並創建包應用標識符對象;A-2 所述智慧卡判斷所述頭組件中是否存在包名,是則執行步驟A-3 ;否則執行步驟A-4 ;A-3 所述智慧卡根據所述包名創建包名對象,生成包名對象引用;所述智慧卡創建包信息類並將所述包應用標識符對象、所述包版本號、包名對象引用寫入所述包信息類;
在本實施例中,所述智慧卡在創建所述包名對象時產生所述包名對象引用;A-4:所述智慧卡創建包信息類並將所述包應用標識符對象、所述包版本號寫入所述包信息類;步驟41-4 所述智慧卡判斷是否讀取到頭組件結束標籤,是則執行步驟41-6 ;否則執行步驟41-5 ;步驟41-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的頭組件數據;若存在,則返回步驟41-1 ;若不存在,則執行步驟402 ;步驟41-6 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;步驟405 所述智慧卡從所述通信緩衝區讀取目錄組件數據並進行處理,處理過程與步驟404類似,區別是對組件數據的內容處理不同,具體步驟如下步驟42-1 所述智慧卡從所述通信緩衝區讀取目錄組件數據,並根據當前讀取的目錄組件數據中的第二字節長度設置第二計數器;在本實施例中,所述第二計數器用於計量當前讀取的目錄組件數據所包含的數據大小信息;步驟42-2 所述智慧卡判斷所述智慧卡讀取且未處理的目錄組件數據的大小與第二計數器的計數是否匹配;若匹配,則執行步驟42-3 ;否則執行步驟42-4 ;步驟42-3 所述智慧卡對未處理的目錄組件數據的內容進行處理,並根據所處理目錄組件數據的字節數對第二計數器進行相應的減操作;在本實施例中,第二計數器為0吋,確定當前讀取的目錄組件數據的內容處理完畢;具體地,處理所述目錄組件數據的內容的具體操作步驟如下步驟B-I 所述智慧卡根據目錄組件中12個組件的大小信息並創建目錄數組;步驟B-2 所述智慧卡將至少10個組件的大小信息存儲至所述目錄數組中;在本實施例中,所述智慧卡將頭組件、目錄組件、應用組件、導入組件、類組件、方法組件、靜態域組件、導出組件、常量池組件、位置引用組件的大小信息存儲至目錄數組中, 也可以進ー步存儲描述符組件和調試組件;步驟42-4 所述智慧卡判斷是否讀取到目錄組件數據結束標籤,是則執行步驟 42-6 ;否則執行步驟42-5 ;步驟42-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的目錄組件數據;若存在,則從所述通信緩衝區繼續讀取頭組件數據,並返回步驟42-2 ;若不存在,則執行步驟 402 ;步驟42-6 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;步驟406 所述智慧卡從所述通信緩衝區讀取應用組件數據並進行處理,處理過程與404類似,區別是對組件數據的內容處理不同,具體步驟如下步驟43-1 所述智慧卡從所述通信緩衝區讀取應用組件數據,並根據當前讀取的應用組件數據中的第二字節長度設置第二計數器;在本實施例中,所述第二計數器用於計量當前讀取的應用組件數據所包含的數據
步驟43-2 所述智慧卡判斷所述智慧卡讀取且未處理的應用組件數據的大小與第二計數器的計數是否匹配;若匹配,則執行步驟43-3 ;否則執行步驟43-4 ;步驟43-3 所述智慧卡對未處理的應用組件數據的內容進行處理,並根據所處理應用組件數據的字節數對第二計數器進行相應的減操作;在本實施例中,第二計數器為0吋,確定當前讀取的應用組件數據的內容處理完畢;具體地,在本實施例中,所述應用組件中包含應用類數量和應用組件的應用標識符,處理所述應用組件數據的內容的具體操作步驟如下C-I 所述智慧卡從應用組件中獲取應用類數量和應用組件的應用標識符,並根據應用組件的應用標識符創建應用組件的應用標識符對象,生成應用標識符對象引用C-2 所述智慧卡將應用標識符對象引用寫入所述包信息類;步驟43-4:所述智慧卡判斷是否讀取到應用組件數據結束標籤,是則執行步驟 43-6 ;否則執行步驟43-5 ;步驟43-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的應用組件數據;若存在,則從所述通信緩衝區繼續讀取應用組件數據,並返回步驟43-2 ;若不存在,則執行步驟 402 ;步驟43-6 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;步驟407 所述智慧卡從所述通信緩衝區讀取導入組件數據並進行處理,處理過程與步驟404類似,區別是對組件數據的內容處理不同,具體步驟如下步驟44-1 所述智慧卡從所述通信緩衝區讀取導入組件數據,並根據當前讀取的導入組件數據中的第二字節長度設置第二計數器;在本實施例中,所述第二計數器用於計量當前讀取的導入組件數據所包含的數據大小信息;步驟44-2 所述智慧卡判斷所述智慧卡讀取且未處理的導入組件數據的大小與第二計數器的計數是否匹配;若匹配,則執行步驟44-3 ;否則執行步驟44-4 ;步驟44-3 所述智慧卡對未處理的導入組件數據的內容進行處理,並根據所處理導入組件數據的字節數對第二計數器進行相應的減操作;在本實施例中,第二計數器為0吋,確定當前讀取的導入組件數據的內容處理完畢;具體地,處理所述導入組件數據的內容的具體操作步驟如下D-I 所述智慧卡從導入組件中獲取導入包的相關信息;在本實施例中,所述導入組件包括多個導入包的相關信息,所述導入包的相關信息可以包含導入包應用標識符、導入包序號,也可以進一歩包含導入包包名;每個導入包標識對應ー個導入包序號,每個導入包序號對應ー個導入包;D-2 所述智慧卡創建導入數組;D-3:所述智慧卡從未解析的導入包的相關信息中獲取導入包序號並存儲至所述導入數組;
D-4 所述智慧卡判斷是否存在未解析的導入包的相關信息,是則返回步驟D-3 ; 否則確定對導入組件處理完畢;步驟44-4 所述智慧卡判斷是否讀取到導入組件數據中結束標籤,是則執行步驟 44-6 ;否則執行步驟44-5 ;步驟44-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的導入組件數據;若存在,則從所述通信緩衝區繼續讀取導入組件數據,並返回步驟44-2 ;若不存在,則執行步驟 402 ;步驟44-6 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;步驟408 所述智慧卡從所述通信緩衝區讀取類組件數據並進行處理,下面將結合圖6對類組件的處理方法進行介紹,具體步驟如下步驟45-1 所述智慧卡從所述目錄數組中獲取類組件的大小信息,根據類組件的大小為所述類組件分配第一存儲地址段,並從所述通信緩衝區讀取類組件數據,並將類組件數據存儲至所述第一存儲地址段;步驟45-2 所述智慧卡判斷是否讀取完所述類組件包含的類組件數據,是則執行步驟45-3 ;否則返回步驟402 ;步驟45-3 所述智慧卡對類組件數據內容進行處理並判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;本實施例中,所述第一存儲地址段存滿表示所述類組件包含的類組件數據已讀取完畢,也可以通過讀取到類組件數據中結束標籤確定所述類組件包含的類組件數據已讀取完畢;所述類組件是程序執行的核心,包含CAP文件的所有接ロ信息和類信息,所述接ロ信息和類信息統稱為類組件単元信息;具體地,所述類組件的具體步驟如下E-I 所述智慧卡通過類組件単元信息標識位判斷所述類組件単元信息是否為接 ロ信息,是則執行步驟E-2 ;否則執行步驟E-3 ;優選地,在本實施例中,所述類組件単元信息標識位為1時表示所述類組件単元信息為所述接ロ信息,所述類組件単元信息標識位為0時表示所述類組件単元信息為所述類信息;E-2 所述智慧卡處理所述接ロ信息;E-3 所述智慧卡處理所述類信息;步驟409 所述智慧卡從所述通信緩衝區讀取方法組件數據並進行處理,處理過程與步驟408類似,區別是對組件數據的內容處理不同,具體步驟如下步驟46-1 所述智慧卡從所述目錄數組中獲取方法組件的大小信息,根據方法組件的大小為所述方法組件分配第二存儲地址段,並從所述通信緩衝區讀取方法組件數據, 並將方法組件數據存儲至所述第二存儲地址段;步驟46-2 所述智慧卡判斷是否讀取完所述方法組件包含的方法組件數據,是則對清空所述方法組件數據的內容中異常信息,並執行步驟46-3 ;否則返回步驟402 ;本實施例中,所述第一存儲地址段存滿表示所述方法組件包含的方法組件數據已讀取完畢,也可以通過讀取到方法組件數據中結束標籤確定所述方法組件包含的方法組件數據已讀取完畢;步驟46-3 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;步驟410 所述智慧卡從所述通信緩衝區讀取靜態域組件數據並進行處理,處理過程與步驟404類似,區別是組件數據的內容的處理不同,具體操作如下步驟47-1 所述智慧卡從所述通信緩衝區讀取靜態域組件數據,並根據當前讀取的靜態域組件數據中的第二字節長度設置第二計數器;在本實施例中,所述第二計數器用於計量當前讀取的靜態域組件數據所包含的數據大小信息;步驟47-2 所述智慧卡判斷所述智慧卡讀取且未處理的靜態域組件數據的大小與第二計數器的計數是否匹配;若匹配,則執行步驟47-3 ;否則執行步驟47-4 ;步驟47-3 所述智慧卡對未處理的靜態域組件數據的內容進行處理,井根據所處理靜態域組件數據的字節數對第二計數器進行相應的減操作;在本實施例中,第二計數器為0吋,確定當前讀取的靜態域組件數據的內容處理完畢;具體地,處理靜態域組件的內容的具體操作步驟如下G-I 所述智慧卡從所述目錄組件中獲取所述靜態域組件的大小信息,井根據所述靜態域組件的大小為所述靜態域組件分配第三存儲地址段;G-2 所述智慧卡將所述靜態域組件存儲至所述第三存儲地址段;G-3 所述智慧卡創建靜態數組並對所述靜態數組進行初始化;優選地,在本實施例中,所述智慧卡使用預設值(0)來初始化靜態數組;G-4 所述智慧卡清除未初始化的靜態數組;步驟47-4 所述智慧卡判斷是否讀取到靜態域組件數據中結束標籤,是則執行步驟47-6 ;否則執行步驟47-5 ;步驟47-5 所述智慧卡判斷所述通信緩衝區是否存在未讀取的靜態域組件數據; 若存在,則從所述通信緩衝區繼續讀取靜態域組件數據,並返回步驟47-2 ;若不存在,則執行步驟402 ;步驟47-6 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;步驟411 所述智慧卡從所述通信緩衝區讀取導出組件數據並進行處理,處理過程與步驟408類似,區別在於組件數據的內容處理不同,具體步驟如下步驟48-1 所述智慧卡從所述目錄數組中獲取導出組件的大小信息,根據方法組件的大小為所述導出組件分配第四存儲地址段,並從所述通信緩衝區讀取導出組件數據, 並將導出組件數據存儲至所述第四存儲地址段;步驟48-2 所述智慧卡判斷是否讀取完所述導出組件包含的導出組件數據,是則對所述導出組件進行處理,並執行步驟48-3 ;否則返回步驟402 ;具體地,處理所述導出組件的具體操作步驟如下所述導出組件包含類偏移地址、靜態域偏移數組、靜態方法偏移數組;H-I 所述智慧卡為所述類偏移地址分配虛擬機標識;
H-2 所述智慧卡從所述靜態域偏移數組中獲取靜態域的偏移地址,根據所述靜態域的偏移地址得到靜態域引用,並為所述靜態域引用分配虛擬機標識;H-3:所述智慧卡從靜態方法偏移數組中獲取靜態常量池索引的偏移地址,根據所述靜態常量池索引的偏移地址得到靜態方法引用,並為所述靜態方法引用分配虛擬機標識;步驟48-3 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;步驟412 所述智慧卡從通信緩衝區讀取常量池組件並進行處理,具體步驟如下步驟49-1 所述智慧卡從所述目錄數組中獲取常量池組件的大小信息,並判斷是否小於第一存儲器的存儲空間,是則從所述通信緩衝區讀取常量池組件數據並將常量池組件數據存儲至第一存儲器中;否則從所述通信緩衝區讀取常量池組件數據並將所述常量池組件數據存儲至第二存儲器中;在本實施例中,所述第一存儲器為隨機存儲器,第二存儲器為非易失性存儲器;步驟49-2 所述智慧卡判斷是否讀取完所述導出組件包含的導出組件數據,是則對所述導出組件進行處理,並執行步驟49-3 ;否則返回步驟402 ;具體地,處理所述常量池組件的操作步驟為I-I 所述智慧卡從所述常量池組件中獲取常量池表項數組的元素個數,並將第三計數器的計數值設置為所述常量池表項數組的元素個數;在本實施例中,所述第三計數器用於計量常量池表項數組的元素個數;1-2 所述智慧卡從常量池組件中獲取所述常量池表項數組元素,並根據常量池表項數組當前元素的標籤判斷所述常量池表項數組當前元素的類型;在本實施例中,所述常量池表項數組的元素類型包括類引用、實例引用、父類方法引用、靜態域引用、靜態方法引用;優選地,在本實施例中,所述常量池表項數組當前元素的第一個字節表示所述常量池表項數組當前元素的標籤;1-3:所述智慧卡根據所述常量池表項數組元素的類型執行相應操作,具體見實施例4解析常量池組件的方法,在此不贅述;1-4 所述智慧卡對第三計數器的計數值執行減1操作;在本實施例中,所述智慧卡對所述第三計數器的計數值執行減1操作後,所述第三計數器的計數值表示所述常量池表項數組中未解析的元素個數;1-5 所述智慧卡判斷第三計數器的計數值是否等於0,是則確定對常量池組件解析完畢;否則返回步驟1-2 ;步驟49-3 所述智慧卡判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則執行步驟403 ;如果不存在,則執行步驟402 ;步驟413 所述智慧卡從所述通信緩衝區讀取位置引用組件數據並進行處理,具體處理過程與實施例1中步驟113相同,在此不再贅述。實施例3本發明實施例3提供了ー種智慧卡下載並解析常量池組件的方法,下面結合圖7 進行介紹,具體步驟如下
步驟701 智慧卡從目錄數組中獲取常量池組件的大小信息;在本實施例中,所述智慧卡在下載解析目錄組件時從所述目錄組件中獲取12組件的大小信息,並存於目錄數組中;步驟702 所述智慧卡判斷常量池組件是否小於第一存儲器的存儲空間,是則執行步驟703 ;否則執行步驟704 ;在本實施例中,所述第一存儲器為隨機存儲器;步驟703 所述智慧卡從通信緩衝區讀取常量池組件數據並存儲至第一存儲器中,執行步驟705 ;步驟704 所述智慧卡從通信緩衝區讀取常量池組件數據並存儲至第二存儲器中,執行步驟705 ;在本實施例中,所述第二存儲器為非易失性存儲器;步驟705 所述智慧卡判斷是否讀取完所述常量池組件包含的常量池組件數據, 是則執行步驟706,否則返回步驟702 ;步驟706 所述智慧卡從所述常量池組件中獲取常量池表項數組的元素個數並將第三計數器的計數值設置為所述常量池表項數組的元素個數;在本實施例中,所述第三計數器用於計量常量池表項數組的元素個數;步驟707 所述智慧卡從常量池組件中獲取ー個常量池表項數組的元素;在本實施例中,所述常量池表項數組的元素類型包括類引用、實例引用、父類方法引用、靜態域引用、靜態方法引用;步驟708 所述智慧卡根據當前元素的標籤判斷常量池表項數組當前元素類型; 根據不同的元素類型執行相應的操作,解析當前元素得到常量池表項的內容;在本實施例中,所述常量池表項數組當前元素的第一個字節表示當前元素的標籤;具體地,解析後的常量池表項數組的內容具體包括導入包類虛擬機標識、包內類虛擬機標識、導入包類實例引用的大小、包內類實例引用的大小、導入包父類方法虛擬機標識、 包內父類方法虛擬機標識、導入包靜態域虛擬機標識、包內靜態域虛擬機標識、導入包靜態方法虛擬機標識、包內靜態方法虛擬機標識;常量池表項數組當前元素類型為類引用時,執行如下操作步驟72-1 所述智慧卡判斷常量池表項數組當前元素的最高位是否為1,是則執行步驟72-2 ;否則執行步驟72-8 ;在本實施例中,當所述常量池表項數組當前元素類型為實例引用吋,最高位為1, 表示類是在導入包中定義的,所述常量池表項數組當前元素中包含導入包標識;最高位為 0,表示所述類是在包內定義的,所述常量池表項數組當前元素中包含包內類標識;步驟72-2 所述智慧卡通過所述常量池表項數組當前元素得到導入包標識獲取導入包序號;步驟72-3 所述智慧卡根據所述導入包序號獲取導入包類標識;在本實施例中,所述常量池表項數組當前元素類型為類實例引用吋,所述導入包序號指向的地址中存儲的內容是導入包類標識;步驟72-4 所述智慧卡根據所述導入包類標識獲取導入包類虛擬機標識;在本實施例中,所述導入包類標識指向的地址中存儲的內容是所述導入包類虛擬機稱識;步驟72-5 所述智慧卡根據所述導入包類虛擬機標識獲取引用表索引數組元素;在本實施例中,所述導入包類虛擬機標識指向所述引用表索引數組元素的地址, 引用表索引數組元素的地址中處存儲的內容是引用表索引數組元素;步驟72-6 所述智慧卡根據引用表索引數組元素獲取導入包類引用標識;在本實施例中,所述引用表索引數組元素即所述導入包類引用標識在類組件中的偏移地址,引用表索引數組元素指向的地址中存儲的內容是導入包類引用;步驟72-7 所述智慧卡根據所述導入包類引用標識獲取導入包類實例的大小,並將所述導入包類實例的大小寫入所述常量池表項數組替換當前元素,執行步驟709 ;在本實施例中,所述導入包類引用標識指向偏移地址的第三個字節表示所述導入包類實例的大小;步驟72-8 所述智慧卡根據所述常量池表項數組當前元素得到包內標識並獲取包內類虛擬機標識;在本實施例中,所述包內類標識指向的地址中存儲的內容是所述包內類虛擬機標識;步驟72-9 所述智慧卡根據所述包內類虛擬機標識獲取引用表索引數組元素;在本實施例中,根據包內類虛擬機標識指向所述引用表索引數組元素的位置,引用表索引數組元素的位置處存儲的內容是引用表索引數組元素;步驟72-10 所述智慧卡根據引用表索引數組元素獲取包內類引用標識;在本實施例中,所述引用表索引數組元素即所述包內類引用標識在類組件中的偏移地址;步驟72-11 所述智慧卡根據所述包內類引用標識獲取包內類實例的大小,並將所述包內類實例的大小寫入所述常量池表項數組替換當前元素,執行步驟709 ;優選地,在本實施例中,所述包內類引用標識指向偏移地址的第三個字節表示所述包內類實例的大小;常量池表項數組當前元素類型為父類方法引用時,執行如下操作步驟73-1 所述智慧卡判斷常量池表項數組當前元素的最高位是否為1,是則執行步驟73-2,否則執行步驟73-8 ;在本實施例中,當所述常量池表項數組當前元素類型為父類方法引用吋,最高位為1,表示父類方法是在導入包中定義的,所述常量池表項數組當前元素中包含導入包標識;最高位為0吋,表示父類方法是在包內定義的,所述常量池表項數組當前元素中包含包內父類標識;步驟73-2 所述智慧卡通過所述常量池表項數組當前元素得到導入包標識並獲取導入包序號;步驟73-3 所述智慧卡根據所述導入包序號獲取導入包父類標識;在本實施例中,所述常量池表項數組當前元素類型為父類方法引用吋,所述導入包序號指向的地址中存儲的內容是導入包父類標識;步驟73-4 所述智慧卡根據所述導入包父類標識獲取導入包父類虛擬機標識;在本實施例中,所述導入包父類標識指向的地址中存儲的內容是所述導入包父類虛擬機標識;步驟73-5 所述智慧卡根據所述導入包父類虛擬機標識獲取方法表基數;在本實施例中,所述導入包父類虛擬機標識指向的地址中存儲的內容是方法表, 根據所述方法表得到方法表基數;步驟73-6 所述智慧卡判讀方法表基數是否小於所述導入包父類標識;是則執行步驟73-7 ;否則執行步驟73-8 ;步驟73-7 所述智慧卡從所述方法表中獲取導入包父類方法虛擬機標識,並將所述導入包父類方法虛擬機標識寫入所述常量池表項數組替換當前元素,執行步驟709 ;在本實施例中,所述方法表中中包含導入包父類虛擬機標識;步驟73-8 所述智慧卡獲取當前導入包父類標識對應的導入包父類的父類的標識,判斷所述導入包父類的父類的標識是否為非法標識,如果所述導入包父類的父類的標識為所述非法標識,則執行步驟709,如果所述導入包父類的父類的標識不是所述非法標識,則使用所述導入包父類的父類的標識替換當前導入包父類標識,返回步驟73-4 ;步驟73-9 所述智慧卡根據所述常量池表項數組當前元素得到包內父類標識並獲取包內父類虛擬機標識;在本實施例中,所述常量池表項數組當前元素類型為父類方法引用吋,包內父類標識指向的地址中存儲的內容是所述包內父類虛擬機標識;步驟73-10 所述智慧卡根據所述包內父類虛擬機標識獲取包內父類方法標識;在本實施例中,所述包內父類虛擬機標識指向的地址中存儲的內容是所述包內父類方法標識;步驟73-11 所述智慧卡根據所述包內父類方法標識獲取包內父類方法虛擬機標識,並將所述包內父類方法虛擬機標識寫入所述常量池表項數組替換當前元素,執行步驟 709 ;在本實施例中,所述包內父類方法標識指向的地址中存儲的內容是包內父類方法虛擬機標識;常量池表項數組當前元素類型為靜態域引用時,執行如下操作步驟74-1 所述智慧卡判斷常量池表項數組當前元素的最高位是否為1,是則執行步驟74-2,否則執行步驟74-5 ;在本實施例中,所述常量池表項數組當前元素類型為靜態域引用吋,最高位為1, 表示靜態域是在導入包中定義的,所述常量池表項數組當前元素包含導入包標識;最高位為0吋,表示靜態域是在包內定義的,所述常量池表項數組當前元素包含包內靜態域標識;步驟74-2 所述智慧卡通過常量池表項數組當前元素得到導入包標識,井根據導入包標識獲取導入包序號;在本實施例中,所述包內靜態域標識指向的地址中存儲的內容是所述包內靜態域虛擬機標識;步驟74-3 所述智慧卡根據導入包序號得到導入包靜態域標識;在本實施例中,所述導入包序號指向的地址中存儲的內容是導入包靜態域標識;步驟74-4 所述智慧卡根據導入包靜態域標識獲取導入包靜態域虛擬機標識,將導入包靜態域虛擬機標識寫入常量池表項數組替換當前元素,執行步驟709 ;
在本實施例中,所述導入包靜態域標識指向的地址中存儲的內容是所述導入包靜態域虛擬機標識;步驟74-5 所述智慧卡根據所述常量池表項數組當前元素得到包內靜態域標識並獲取包內靜態域虛擬機標識,並將所述包內靜態域虛擬機標識寫入常量池表項數組替換當前元素,執行步驟709;常量池表項數組當前元素類型為靜態方法引用時,執行如下操作步驟75-1 所述智慧卡判斷常量池表項數組當前元素的最高位是否為1,是則執行步驟75-1 ;否則執行步驟75-5 ;在本實施例中,所述常量池表項數組當前元素為靜態方法引用吋,最高位為1,表示靜態方法是在導入包中定義的,所述常量池表項數組當前元素包含導入包標識;最高位為0吋,表示靜態方法是在包內定義的,所述常量池表項數組當前元素包含包內靜態方法標識;步驟75-2 所述智慧卡根據常量池表項數組當前元素得到導入包標識,井根據導入包標識獲取導入包序號;步驟75-3 所述智慧卡根據導入包序號得到導入包中靜態方法標識;在本實施例中,所述常量池表項數組當前元素類型為靜態方法引用吋,所述導入包序號指向的地址中存儲的內容是導入包中靜態方法標識;步驟75-4 所述智慧卡根據所述導入包靜態方法標識獲取導入包靜態方法虛擬機標識,並將導入包靜態方法虛擬機標識寫入常量池表項數組替換當前元素,執行步驟 709 ;在本實施例中,所述導入包靜態方法標識指向的地址中存儲的內容是所述導入包靜態方法虛擬機標識;步驟75-5 所述智慧卡根據所述常量池表項數組當前元素得到包內靜態方法標識並獲取包內靜態方法虛擬機標識,並將所述包內靜態方法虛擬機標識寫入常量池表項數組替換當前元素,執行步驟709 ;在本實施例中,所述包內靜態方法標識指向的地址中存儲的內容是所述包內靜態方法虛擬機標識;步驟709 所述智慧卡對第三計數器的計數值執行減1操作;在本實施例中,所述智慧卡對所述第三計數器的計數值執行減1操作後,所述第三計數器的計數值表示所述常量池表項數組中未解析的元素個數;步驟710 所述智慧卡判斷第三計數器的計數值是否等於0,是則執行步驟711 ;否則返回步驟707 ;步驟711 所述智慧卡清空常量池組件佔用的存儲空間;實施例4參見圖8,本發明實施例4提供了ー種智慧卡下載並解析位置引用組件的方法,具體步驟如下步驟801 智慧卡從通信緩衝區讀取位置引用組件數據;在本實施例中,所述位置引用組件的操作數據包含的信息為單字節索引數組元素個數的高字節、單字節索引數組元素個數的低字節、單字節索引數組的元素、雙字節索引數組元素個數的高字節、雙字節索引數組元素個數的低字節、雙字節索引數組的元素;步驟802 所述智慧卡判斷第二狀態標誌位的取值,根據不同的取值執行相應的操作;在本實施例中,所述第二狀態標誌位的取值包括第十一預設值、第十二預設值、 第十三預設值、第十四預設值、第十五預設值、第十六預設值;優選地,在本實施例中,第二狀態標誌位的第十一預設值為0 ;第二狀態標誌位的第十二預設值為1 ;第二狀態標誌位的第十三預設值為2 ;第二狀態標誌位的第十四預設值為3 ;第二狀態標誌位的第十五預設值為4 ;第二狀態標誌位的第十六預設值為5 ;情況ー當第二狀態標誌位的取值為第十一預設值,執行如下操作步驟81-1 所述智慧卡根據操作數據得到單字節索引數組元素個數的高字節位, 並將第三計數器的值設置為所述單字節索引數組元素個數的高字節;在本實施例中,所述第三計數器用來計量單字節索引數組元素個數;步驟81-2 所述智慧卡清空位置引用組件的當前操作數據;步驟81-3 所述智慧卡將第二狀態標誌位的取值修改為第十二預設值,返回步驟 801 ;當第二狀態標誌位的取值為第十二預設值,執行如下操作;步驟82-1 所述智慧卡根據操作數據得到單字節索引數組長度的低字節位,並重置所述第三計數器;在本實施例中,所述智慧卡重置所述第三計數器的具體操作為所述智慧卡將所述第三計數器的計數值左移八位後得到的值與單字節索引數組元素個數的低字的值相加;步驟82-2 所述智慧卡清空位置引用組件的當前操作數據;步驟82-3 所述智慧卡將第二狀態狀態標誌位的取值修改為第十三預設值,返回步驟801 ;當第二狀態標誌位的取值為第十三預設值,執行如下操作;步驟83-1 所述智慧卡判斷當前操作數據的值是否等於255,是則執行步驟83-2 ; 否則執行步驟83-3 ;在本實施例中,所述操作數據的值的範圍為0 255 ;當所述智慧卡處於單字節索引數組狀態吋,接收到的操作數據包含單字節索引數組元素,即第一常量池索引在方法組件內的偏移地址;步驟83-2 所述智慧卡重置第四計數器後返回步驟401 ;在本實施例中,所述第四計數器用來計量第一常量池索引和第二常量池索引在方法組件內的偏移地址;所述智慧卡初始化所述第四計數器的具體操作為所述智慧卡將第四計數器的當前計數值與255相加;步驟83-3 所述智慧卡將第四計數器的計數值設置為第四計數器的當前計數值與當前操作數據值之和,井清空位置引用組件的當前操作數據;步驟83-4 所述智慧卡根據所述第一常量池索引在方法組件內的偏移地址得到第一常量池索引的內容;
在本實施例中,所述第一常量池索引在方法組件內的偏移地址指向的地址中存儲的是第一常量池索引的地址,所述智慧卡根據第一常量池索引的地址得到第一常量池索引的內容;步驟83-5 所述智慧卡用第一常量池索引的內容替換所述第一常量池索引在方法組件內的偏移地址指向的地址中的內容;步驟83-6 所述智慧卡對所述第三計數器的計數值執行減1操作;在本實施例中,所述智慧卡對所述第三計數器的計數值執行減1操作後,所述第三計數器的計數值表示所述單字節索引數組中未解析的元素個數;步驟83-7 所述智慧卡判斷所述第三計數器的計數值是否等於0,是則執行步驟 83-8 ;否則返回步驟801 ;步驟83-8 所述智慧卡將第二狀態標誌位的取值修改為第十四預設值,返回步驟 801 ;當第二狀態標誌位的取值為第十四預設值,執行如下操作步驟84-1 所述智慧卡根據操作數據得到雙字節索引數組元素個數的高字節,並將第三計數器設置為所述單字節索引數組元素個數的高字節;步驟84-2 所述智慧卡清空位置引用組件的當前操作數據;步驟84-3 所述智慧卡將第二狀態標誌位的取值修改為第十五預設值,返回步驟 801 ;當第二狀態標誌位的取值為第十五預設值,執行如下操作步驟85-1 所述智慧卡重置所述第三計數器;在本實施中,所述智慧卡重置所述第三計數器的具體操作為所述智慧卡將所述第三計數器的計數值左移八位後得到的值與雙字節索引數組長度的低字節的值相加;步驟85-2 所述智慧卡清空位置引用組件的操作數據;步驟85-3 所述智慧卡將第二狀態標誌位的取值修改為第十六預設值,返回步驟 801 ;當第二狀態標誌位的取值為第十六預設值,執行如下操作步驟86-1 所述智慧卡判斷當前操作數據的值是否等於255,是則執行步驟86-2 ; 否則執行步驟86-3 ;在本實施例中,所述操作數據的值的範圍為0 255 ;當所述智慧卡處於雙字節索引數組狀態吋,接收到的操作數據包含雙字節索引數組元素,即第二常量池索引在方法組件內的偏移地址;步驟86-2 所述智慧卡初始化第四計數器後返回步驟801 ;在本實施例中,所述智慧卡初始化第四計數器的具體操作為所述智慧卡將第四計數器的當前計數值與255相加;步驟86-3 所述智慧卡將第四計數器的計數值設置為第四計數器的當前計數值與當前操作數據值之和,井清空接收到的操作數據;步驟86-4 所述智慧卡根據所述第二常量池索引在方法組件內的偏移地址得到第二常量池索引的內容;在本實施例中,所述第二常量池索引在方法組件內的偏移地址指向的地址中存儲的是第二常量池索引地址,所述智慧卡根據第二常量池索引的地址得到第二常量池索引的內容;步驟86-5 所述智慧卡用所述第二常量池索引的內容替換所述第二常量池索引在組件內的偏移地址指向的地址中的內容;步驟86-6 所述智慧卡對所述第三計數器的計數值執行減1操作;在本實施例中,所述智慧卡對所述第三計數器的計數值執行減1操作後,所述第三計數器的計數值表示所述雙字節索引數組中未解析的元素個數;步驟86-7 所述智慧卡判斷所述第三計數器的計數值是否等於0,是則完成位置引用組件下載解析過程;否則執行步驟801。本發明實施例描述的方法中的步驟可以適應Java卡,也可適應其他類型的智慧卡。以上所述,僅為本發明的具體實施方式
,但本發明的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本發明揭露的技術範圍內,可輕易想到變化或替換,都應涵蓋在本發明的保護範圍之內。因此,本發明的保護範圍應所述以權利要求的保護範圍為準。
4權利要求
1. 一種智慧卡處理CAP文件的方法,其特徵在於,包括以下步驟A、智慧卡與外部終端建立連接,並進行初始化;B、所述智慧卡接收CAP文件對應的應用程式數據協議單元APDU命令,將所述APDU命令包含的數據存儲到通信緩衝區;C、所述智慧卡對第一狀態標誌位的取值進行判斷,如果所述第一狀態標誌位的取值為第一預設值,則執行步驟D ;如果所述第一狀態標誌位的取值為第二預設值,則執行步驟E ; 如果所述第一狀態標誌位的取值為第三預設值,則執行步驟F ;如果所述第一狀態標誌位的取值為第四預設值,則執行步驟G ;如果所述第一狀態標誌位的取值為第五預設值,則執行步驟H ;如果所述第一狀態標誌位的取值為第六預設值,則執行步驟I ;如果所述第一狀態標誌位的取值為第七預設值,則執行步驟J ;如果所述第一狀態標誌位的取值為第八預設值,則執行步驟K ;如果所述第一狀態標誌位的取值為第九預設值,則執行步驟L ;如果所述第一狀態標誌位的取值為第十預設值,則執行步驟M ;D、所述智慧卡從所述通信緩衝區讀取頭組件數據;當所述智慧卡讀取且未處理的頭組件數據的大小與所述智慧卡讀取到的頭組件數據所包含的數據大小信息匹配時,所述智慧卡對所述未處理的頭組件數據進行處理;當所述智慧卡未讀取完頭組件包含的所有頭組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述頭組件包含的所有頭組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第二預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ; 否則,返回步驟B;E、所述智慧卡從所述通信緩衝區讀取目錄組件數據;當所述智慧卡讀取且未處理的目錄組件數據的大小與所述智慧卡讀取到的目錄組件數據所包含的數據大小信息匹配時,所述智慧卡對所述未處理的目錄組件數據進行處理;當所述智慧卡未讀取完目錄組件包含的所有目錄組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述目錄組件包含的所有目錄組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第三預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C;否則,返回步驟B;F、所述智慧卡從所述通信緩衝區讀取應用組件數據;當所述智慧卡讀取且未處理的應用組件數據的大小與所述智慧卡讀取到的應用組件數據所包含的數據大小信息匹配時,所述智慧卡對所述未處理的應用組件數據進行處理;當所述智慧卡未讀取完應用組件包含的所有應用組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述應用組件包含的所有應用組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第四預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;G、所述智慧卡從所述通信緩衝區讀取導入組件數據;當所述智慧卡讀取且未處理的導入組件數據的大小與所述智慧卡讀取到的導入組件數據所包含的數據大小信息匹配時,所述智慧卡對所述未處理的導入組件數據進行處理;當所述智慧卡未讀取完導入組件包含的所有導入組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述導入組件包含的所有導入組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第五預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;H、所述智慧卡從所述通信緩衝區讀取類組件數據;當所述智慧卡未讀取完類組件包含的所有類組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述類組件包含的所有類組件數據時,所述智慧卡處理所述類組件,將所述第一狀態標誌位的取值修改為所述第六預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;I、所述智慧卡從所述通信緩衝區讀取方法組件數據;當所述智慧卡未讀取完方法組件包含的所有方法組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述方法組件包含的所有方法組件數據時,所述智慧卡處理所述方法組件,將所述第一狀態標誌位的取值修改為所述第七預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;J、所述智慧卡從所述通信緩衝區讀取靜態域組件數據;當所述智慧卡讀取且未處理的靜態域組件數據的大小與所述智慧卡讀取到的靜態域組件數據所包含的數據大小信息匹配時,所述智慧卡對所述未處理的靜態域組件數據進行處理;當所述智慧卡未讀取完所述靜態域組件包含的所有靜態域組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述靜態域組件包含的所有靜態域組件數據均處理完畢後,所述智慧卡將所述第一狀態標誌位的取值修改為所述第八預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;K、所述智慧卡從所述通信緩衝區讀取導出組件數據;當所述智慧卡未讀取完導出組件包含的所有導出組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述導出組件包含的所有導出組件數據時,所述智慧卡處理所述導出組件,將所述第一狀態標誌位的取值修改為所述第九預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;L、所述智慧卡從所述通信緩衝區讀取常量池組件數據;當所述智慧卡未讀取完常量池組件包含的所有常量池組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟 B;當所述智慧卡讀取完所述常量池組件包含的所有常量池組件數據時,所述智慧卡處理所述常量池組件,將所述第一狀態標誌位的取值修改為所述第十預設值,判斷所述通信緩衝區是否存在未被讀取的數據,如果存在,則返回步驟C ;否則,返回步驟B ;M、所述智慧卡從所述通信緩衝區讀取位置引用組件數據;當所述智慧卡讀取且未處理的位置引用組件數據的大小與所述智慧卡讀取到的位置引用組件數據所包含的數據大小信息匹配時,所述智慧卡對所述未處理的位置引用組件數據進行處理;當所述智慧卡未讀取完所述位置引用組件包含的所有位置引用組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述位置引用組件包含的所有位置引用組件數據均處理完畢後,結束流程。
2.如權利要求1所述的方法,其特徵在於,所述智慧卡處理所述常量池組件之前,還包括所述智慧卡從所述目錄組件中獲取所述常量池組件的大小信息,判斷所述常量池組件的大小是否大於隨機存儲器的可用存儲空間,如果大於所述可用存儲空間,則根據所述常量池組件的大小信息在非易失存儲器為所述常量池組件分配存儲空間;如果不大於所述可用存儲空間,則根據所述常量池組件的大小信息在所述隨機存儲器為所述常量池組件分配存儲空間;所述智慧卡處理所述常量池組件,包括所述智慧卡將所述常量池組件存儲到為所述常量池組件分配的存儲空間中; 所述智慧卡更新所述常量池組件中的常量池表項數組元素。
3.如權利要求2所述的方法,其特徵在於,所述智慧卡更新所述常量池組件中的常量池表項數組元素之前,還包括所述智慧卡從所述常量池組件中獲取所述常量池表項數組的元素個數,將第一計數器的計數值設置為所述常量池表項數組的元素個數;所述智慧卡更新所述常量池組件中的常量池表項數組元素,包括 步驟a、所述智慧卡從所述常量池組件中獲取一個未解析的常量池表項數組元素,根據獲取的當前元素的標籤判斷所述當前元素的類型,如果所述當前元素的類型為類引用,則執行步驟b ;如果所述當前元素的類型為實例引用,則執行步驟c ;如果所述當前元素的類型為父類方法引用,則執行步驟d;如果所述當前元素的類型為虛擬方法引用,則執行步驟 f;如果所述當前元素的類型為靜態域引用,則執行步驟j ;如果所述當前元素的類型為靜態方法引用,則執行步驟k;步驟b、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包類標識,根據所述導入包類標識獲取導入包類虛擬機標識,使用所述導入包類虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;如果所述最高位不為1,則根據所述當前元素獲取包內類標識,根據所述包內類標識獲取包內類虛擬機標識,使用所述包內類虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;步驟c、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包類實例標識,根據所述導入包類標識獲取導入包類虛擬機標識,根據所述導入包類虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取導入包類引用標識,根據所述導入包類引用標識獲取導入包類實例的大小信息,使用所述導入包類實例的大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內類標識,根據所述包內類標識獲取包內類虛擬機標識,根據所述包內類虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取包內類引用標識,根據所述包內類引用標識獲取包內類實例的大小信息,使用所述包內類實例的大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內類實例標識,根據所述包內類實例標識獲取包內類實例虛擬機標識,根據所述包內類實例虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取包內類實例引用標識,根據所述包內類實例引用標識獲取包內類實例引用的大小信息,使用所述包內類實例引用的大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟d、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位不為1,則執行步驟e ;如果所述最高位為1,則執行步驟f ;步驟e、所述智慧卡根據所述當前元素獲取包內父類標識,根據所述包內父類標識獲取包內父類虛擬機標識,根據所述包內父類虛擬機標識獲取包內父類方法標識,根據所述包內父類方法標識獲取包內父類方法虛擬機標識,使用所述包內父類方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟f、所述智慧卡根據所述當前元素獲取導入包標識以及方法標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取當前導入包父類標識;步驟g、所述智慧卡根據所述當前導入包父類標識獲取所述導入包父類虛擬機標識,根據所述導入包父類虛擬機標識獲取方法表,根據所述方法表獲取方法表基數,判斷所述方法表基數是否小於等於所述方法標識,如果所述方法表基數小於所述方法標識,則執行步驟h ;如果所述方法表基數大於所述方法標識,則執行步驟i ;步驟h、所述智慧卡從所述方法表中獲取導入包父類方法虛擬機標識,使用所述導入包父類方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟i、所述智慧卡根據所述當前導入包父類標識獲取對應的導入包父類,從所述導入包父類中獲取所述導入包父類的父類的標識,判斷所述導入包父類的父類的標識是否為非法標識,如果所述導入包父類的父類的標識為所述非法標識,則返回步驟m ;如果所述導入包父類的父類的標識不是所述非法標識,則使用所述導入包父類的父類的標識替換所述當前導入包父類標識,並返回步驟g ;步驟j、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包靜態域標識,根據所述導入包靜態域標識獲取導入包靜態域虛擬機標識,使用所述導入包靜態域虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟 m ;如果所述最高位不為1,則根據所述當前元素獲取包內靜態域標識,根據所述包內靜態域標識獲取包內靜態域虛擬機標識,使用所述包內靜態域虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟k、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包靜態方法標識,根據所述導入包靜態方法標識獲取導入包靜態方法虛擬機標識,使用所述導入包靜態方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內靜態方法標識,根據所述包內靜態方法標識獲取包內靜態方法虛擬機標識,使用所述包內靜態方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟m、所述智慧卡將所述第一計數器的計數值減1,判斷所述第一計數器的計數值是否為零,如果所述計數值為零,則清空所述常量池組件中除所述常量池表項數組外的內容佔用的存儲空間;如果所述計數值不為零,則返回步驟a。
4.如權利要求1所述的方法,其特徵在於,所述智慧卡處理所述位置引用組件數據,包括所述智慧卡根據所述位置引用組件數據獲取常量池索引在所述方法組件中的偏移地址;所述智慧卡根據所述偏移地址獲取所述常量池索引,根據所述常量池索引獲取對應的常量池表項數組的內容;所述智慧卡使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述常量池索引。
5.如權利要求4所述的方法,其特徵在幹,所述常量池索引包括第一常量池索引和第 ニ常量池索引;所述智慧卡處理所述位置引用組件數據,包括①、所述智慧卡對第二狀態標誌位的取值進行判斷,如果所述第二狀態標誌位的取值為第十一預設值時,則執行步驟②;如果所述第二狀態標誌位的取值為第十二預設值時,則執行步驟③;如果所述第二狀態標誌位的取值為第十三預設值時,執行步驟④;如果所述第二狀態標誌位的取值為第十四預設值吋,執行步驟⑤;如果所述第二狀態標誌位的取值為第十五預設值吋,執行步驟⑥;如果所述第二狀態標誌位的取值為第十六預設值時,執行步驟⑦;②、所述智慧卡從所述位置引用組件數據中獲取單字節索引數組的元素個數的高字節,根據所述高字節設置第二計數器的計數值,將所述第二標誌位的取值修改為所述第十二預設值,並返回步驟①;③、所述智慧卡從所述位置引用組件數據中獲取單字節索引數組的元素個數的低字節,根據所述低字節更新所述第二計數器的計數值,將所述第二標誌位的取值修改為所述第十三預設值,並返回步驟①;④、所述智慧卡從所述位置引用組件數據中獲取ー個未處理的單字節索引數組元素, 根據所述單字節索引數組元素獲取第一常量池索引在所述方法組件內的偏移地址,根據所述偏移地址指向的地址存儲的所述第一常量池索引,獲取對應的常量池表項數組的內容, 使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述第一常量池索引,將所述第二計數器的計數值減1,判斷所述第二計數器的計數值是否等於0, 如果所述第二計數器的計數值不等於0,則返回步驟①;如果所述第二計數器的計數值等於0,則將所述第二標誌位的取值修改為所述第十四預設值,並返回步驟①;⑤、所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組的元素個數的高字節,根據所述高字節設置第三計數器的計數值,將所述第二標誌位的取值修改為所述第十五預設值,並返回步驟①;⑥、所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組的元素個數的低字節,根據所述低字節更新所述第三計數器的計數值,將所述第二標誌位的取值修改為所述第十六預設值,並返回步驟①;⑦、所述智慧卡從所述位置引用組件數據中獲取ー個未處理的雙字節索引數組元素, 根據所述雙字節索引數組元素獲取第二常量池索引在所述方法組件內的偏移地址,根據所述偏移地址指向的地址存儲的所述第二常量池索引,獲取對應的常量池表項數組的內容, 使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述第二常量池索引,將所述第三計數器的計數值減1,判斷所述第三計數器的計數值是否等於0, 如果所述第三計數器的計數值不等於0,則返回步驟①;如果所述第三計數器的計數值等於0,則確定對所述位置引用組件處理完畢。
6.如權利要求5所述的方法,其特徵在幹,所述智慧卡從所述位置引用組件數據中獲取ー個未處理的單字節索引數組元素,包括所述智慧卡從所述位置引用組件數據中獲取單字節索引數組中的未處理的當前操作數據,判斷所述單字節索引數組中的所述當前操作數據是否小於255,如果所述單字節索引數組中的所述當前操作數據不小於255,則將第四計數器的計數值更新為所述第四計數器的當前計數值與255之和,並返回步驟①;如果所述單字節索引數組中的所述當前操作數據小於255,則將第四計數器的計數值更新為所述第四計數器的當前計數值與所述單字節索引數組中的所述當前操作數之和,將所述第四計數器的計數值作為所述未處理的單字節索引數組元素;所述智慧卡從所述位置引用組件數據中獲取ー個未處理的雙字節索引數組元素,包括所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組中的未處理的當前操作數據,判斷所述雙字節索引數組中的所述當前操作數據是否小於255,如果所述雙字節索引數組中的所述當前操作數據不小於255,則將第五計數器的計數值更新為所述第五計數器的當前計數值與255之和,並返回步驟①;如果所述雙字節索引數組中的所述當前操作數據小於255,則將第五計數器的計數值更新為所述第五計數器的當前計數值與所述雙字節索引數組中的所述當前操作數之和,將所述第五計數器的計數值作為所述未處理的雙字節索引數組元素。
7.ー種智慧卡處理CAP文件的方法,其特徵在幹,包括以下步驟A、智慧卡與外部終端建立連接,並進行初始化;B、所述智慧卡接收CAP文件對應的應用程式數據協議単元APDU命令,將所述APDU命令包含的數據存儲到通信緩衝區;C、所述智慧卡對所述APDU命令中的狀態參數進行判斷,如果所述狀態參數的取值為第一預設值,則執行步驟D ;如果所述狀態參數的取值為第二預設值,則執行步驟E ;如果所述狀態參數的取值為第三預設值,則執行步驟F;如果所述狀態參數的取值為第四預設值, 則執行步驟G ;如果所述狀態參數的取值為第五預設值,則執行步驟H ;如果所述狀態參數的取值為第六預設值,則執行步驟I ;如果所述狀態參數的取值為第七預設值,則執行步驟 J ;如果所述狀態參數的取值為第八預設值,則執行步驟K ;如果所述狀態參數的取值為第九預設值,則執行步驟L ;如果所述狀態參數的取值為第十預設值,則執行步驟M ;D、所述智慧卡從所述通信緩衝區讀取頭組件數據;當所述智慧卡讀取且未處理的頭組件數據的大小與所述智慧卡讀取到的頭組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的頭組件數據進行處理;當所述智慧卡未讀取完頭組件包含的所有頭組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述頭組件包含的所有頭組件數據均處理完畢後,返回步驟B ;E、所述智慧卡從所述通信緩衝區讀取目錄組件數據;當所述智慧卡讀取且未處理的目錄組件數據的大小與所述智慧卡讀取到的目錄組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的目錄組件數據進行處理;當所述智慧卡未讀取完目錄組件包含的所有目錄組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述目錄組件包含的所有目錄組件數據均處理完畢後,返回步驟B;F、所述智慧卡從所述通信緩衝區讀取應用組件數據;當所述智慧卡讀取且未處理的應用組件數據的大小與所述智慧卡讀取到的應用組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的應用組件數據進行處理;當所述智慧卡未讀取完應用組件包含的所有應用組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述應用組件包含的所有應用組件數據均處理完畢後,返回步驟B ;G、所述智慧卡從所述通信緩衝區讀取導入組件數據;當所述智慧卡讀取且未處理的導入組件數據的大小與所述智慧卡讀取到的導入組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的導入組件數據進行處理;當所述智慧卡未讀取完導入組件包含的所有導入組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B ;當所述智慧卡對所述導入組件包含的所有導入組件數據均處理完畢後,返回步驟B ;H、所述智慧卡從所述通信緩衝區讀取類組件數據;當所述智慧卡未讀取完類組件包含的所有類組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述類組件包含的所有類組件數據時,所述智慧卡處理所述類組件,並返回步驟 B ;I、所述智慧卡從所述通信緩衝區讀取方法組件數據;當所述智慧卡未讀取完方法組件包含的所有方法組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述方法組件包含的所有方法組件數據時,所述智慧卡處理所述方法組件,並返回步驟B;J、所述智慧卡從所述通信緩衝區讀取靜態域組件數據;當所述智慧卡讀取且未處理的靜態域組件數據的大小與所述智慧卡讀取到的靜態域組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的靜態域組件數據進行處理;當所述智慧卡未讀取完靜態域組件包含的所有靜態域組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述靜態域組件包含的所有靜態域組件數據均處理完畢後,返回步驟B;K、所述智慧卡從所述通信緩衝區讀取導出組件數據;當所述智慧卡未讀取完導出組件包含的所有導出組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡讀取完所述導出組件包含的所有導出組件數據時,所述智慧卡處理所述導出組件,並返回步驟B;L、所述智慧卡從所述通信緩衝區讀取常量池組件數據;當所述智慧卡未讀取完常量池組件包含的所有常量池組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟 B;當所述智慧卡讀取完所述常量池組件包含的所有常量池組件數據時,所述智慧卡處理所述常量池組件,並返回步驟B;M、所述智慧卡從所述通信緩衝區讀取位置引用組件數據;當所述智慧卡讀取且未處理的位置引用組件數據的大小與所述智慧卡讀取到的位置引用組件數據所包含的數據大小信息匹配吋,所述智慧卡對所述未處理的位置引用組件數據進行處理;當所述智慧卡未讀取完位置引用組件包含的所有位置引用組件數據,且所述通信緩衝區不存在未被讀取的數據時,返回步驟B;當所述智慧卡對所述位置引用組件包含的所有位置引用組件數據均處理完畢後,結束流程。
8.如權利要求7所述的方法,其特徵在幹,所述智慧卡處理所述常量池組件之前,還包括所述智慧卡從所述目錄組件中獲取所述常量池組件的大小信息,判斷所述常量池組件的大小是否大於隨機存儲器的可用存儲空間,如果大於所述可用存儲空間,則根據所述常量池組件的大小信息在非易失存儲器為所述常量池組件分配存儲空間;如果不大於所述可用存儲空間,則根據所述常量池組件的大小信息在所述隨機存儲器為所述常量池組件分配存儲空間;所述智慧卡處理所述常量池組件,包括所述智慧卡將所述常量池組件存儲到所述常量池組件分配的存儲空間中; 所述智慧卡更新所述常量池組件中的常量池表項數組元素。
9.如權利要求8所述的方法,其特徵在幹,所述智慧卡更新所述常量池組件中的常量池表項數組元素之前,還包括所述智慧卡從所述常量池組件中獲取所述常量池表項數組的元素個數,將第一計數器的計數值設置為所述常量池表項數組的元素個數;所述智慧卡更新所述常量池組件中的常量池表項數組元素,包括 步驟a、所述智慧卡從所述常量池組件中獲取ー個未解析的常量池表項數組元素,根據獲取的當前元素的標籤判斷所述當前元素的類型,如果所述當前元素的類型為類引用,則執行步驟b ;如果所述當前元素的類型為實例引用,則執行步驟c ;如果所述當前元素的類型為父類方法引用,則執行步驟d;如果所述當前元素的類型為虛擬方法引用,則執行步驟 f;如果所述當前元素的類型為靜態域引用,則執行步驟j ;如果所述當前元素的類型為靜態方法引用,則執行步驟k;步驟b、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包類標識,根據所述導入包類標識獲取導入包類虛擬機標識,使用所述導入包類虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;如果所述最高位不為1,則根據所述當前元素獲取包內類標識,根據所述包內類標識獲取包內類虛擬機標識,使用所述包內類虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;步驟c、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包類標識,根據所述導入包類標識獲取導入包類虛擬機標識,根據所述導入包類虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取導入包類引用標識,根據所述導入包類引用標識獲取導入包類實例的大小信息,使用所述導入包類實例大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內類實例標識,根據所述包內類實例標識獲取包內類實例虛擬機標識,根據所述包內類實例虛擬機標識獲取引用表索引數組元素,根據所述引用表索引數組元素獲取包內類實例引用標識,根據所述包內類實例引用標識獲取包內類實例引用的大小信息,使用所述包內類實例引用的大小信息替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟d、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位不為1,則執行步驟e ;如果所述最高位為1,則執行步驟f ;步驟e、所述智慧卡根據所述當前元素獲取包內父類標識,根據所述包內父類標識獲取包內父類虛擬機標識,根據所述包內父類虛擬機標識獲取包內父類方法標識,根據所述包內父類方法標識獲取包內父類方法虛擬機標識,使用所述包內父類方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟f、所述智慧卡根據所述當前元素獲取導入包標識以及方法標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取當前導入包父類標識;步驟g、所述智慧卡根據所述當前導入包父類標識獲取所述導入包父類虛擬機標識,根據所述導入包父類虛擬機標識獲取方法表,根據所述方法表獲取方法表基數,判斷所述方法表基數是否小於等於所述方法標識,如果所述方法表基數小於所述方法標識,則執行步驟h ;如果所述方法表基數大於所述方法標識,則執行步驟i ;步驟h、所述智慧卡從所述方法表中獲取導入包父類方法虛擬機標識,使用所述導入包父類方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟i、所述智慧卡根據所述當前導入包父類標識獲取對應的導入包父類,從所述導入包父類中獲取所述導入包父類的父類的標識,判斷所述導入包父類的父類的標識是否為非法標識,如果所述導入包父類的父類的標識為所述非法標識,則返回步驟m ;如果所述導入包父類的父類的標識不是所述非法標識,則使用所述導入包父類的父類的標識替換所述當前導入包父類標識,並返回步驟g ;步驟j、所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包靜態域標識,根據所述導入包靜態域標識獲取導入包靜態域虛擬機標識,使用所述導入包靜態域虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟 m ;如果所述最高位不為1,則根據所述當前元素獲取包內靜態域標識,根據所述包內靜態域標識獲取包內靜態域虛擬機標識,使用所述包內靜態域虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟K所述智慧卡判斷所述當前元素的最高位是否為1,如果所述最高位為1,則根據所述當前元素獲取導入包標識,根據所述導入包標識獲取導入包序號,根據所述導入包序號獲取導入包靜態方法標識,根據所述導入包靜態方法標識獲取導入包靜態方法虛擬機標識,使用所述導入包靜態方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m;如果所述最高位不為1,則根據所述當前元素獲取包內靜態方法標識,根據所述包內靜態方法標識獲取包內靜態方法虛擬機標識,使用所述包內靜態方法虛擬機標識替換所述常量池表項數組中的所述當前元素,並執行步驟m ;步驟m、所述智慧卡將所述第一計數器的計數值減1,判斷所述第一計數器的計數值是否為零,如果所述計數值為零,則清空所述常量池組件中除所述常量池表項數組外的內容佔用的存儲空間;如果所述計數值不為零,則返回步驟a。
10.如權利要求7所述的方法,其特徵在幹,所述智慧卡處理所述位置引用組件數據, 包括所述智慧卡根據所述位置引用組件數據,獲取常量池索引在所述方法組件中的偏移地址;所述智慧卡根據所述偏移地址獲取所述常量池索引,根據所述常量池索引獲取對應的常量池表項數組的內容;所述智慧卡使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述常量池索引。
11.如權利要求10所述的方法,其特徵在幹,所述常量池索引包括第一常量池索引和第二常量池索引;所述智慧卡處理所述位置引用組件數據,包括①、所述智慧卡對第二狀態標誌位的取值進行判斷,如果所述第二狀態標誌位的取值為第十一預設值吋,則執行步驟②;如果所述第二狀態標誌位的取值為第十二預設值吋,則執行步驟③;如果所述第二狀態標誌位的取值為第十三預設值時,執行步驟④;如果所述第二狀態標誌位的取值為第十四預設值吋,執行步驟⑤;如果所述第二狀態標誌位的取值為第十五預設值吋,執行步驟⑥;如果所述第二狀態標誌位的取值為第十六預設值時,執行步驟⑦;②、所述智慧卡從所述位置引用組件數據中獲取單字節索引數組的元素個數的高字節,根據所述高字節設置第二計數器的計數值,將所述第二標誌位的取值修改為所述第十二預設值,並返回步驟①;③、所述智慧卡從所述位置引用組件數據中獲取單字節索引數組的元素個數的低字節,根據所述低字節更新所述第二計數器的計數值,將所述第二標誌位的取值修改為所述第十三預設值,並返回步驟①;④、所述智慧卡從所述位置引用組件數據中獲取ー個未處理的單字節索引數組元素, 根據所述單字節索引數組元素獲取第一常量池索引在所述方法組件內的偏移地址,根據所述偏移地址指向的地址存儲的所述第一常量池索引,獲取對應的常量池表項數組的內容, 使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述第一常量池索引,將所述第二計數器的計數值減1,判斷所述第二計數器的計數值是否等於0, 如果所述第二計數器的計數值不等於0,則返回步驟①;如果所述第二計數器的計數值等於0,則將所述第二標誌位的取值修改為所述第十四預設值,並返回步驟①;⑤、所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組的元素個數的高字節,根據所述高字節設置第三計數器的計數值,將所述第二標誌位的取值修改為所述第十五預設值,並返回步驟①;⑥、所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組的元素個數的低字節,根據所述低字節更新所述第三計數器的計數值,將所述第二標誌位的取值修改為所述第十六預設值,並返回步驟①;⑦、所述智慧卡從所述位置引用組件數據中獲取ー個未處理的雙字節索引數組元素, 根據所述雙字節索引數組元素獲取第二常量池索引在所述方法組件內的偏移地址,根據所述偏移地址指向的地址存儲的所述第二常量池索引,獲取對應的常量池表項數組的內容, 使用獲取到的所述常量池表項數組的內容替換所述偏移地址指向的地址存儲的所述第二常量池索引,將所述第三計數器的計數值減1,判斷所述第三計數器的計數值是否等於0, 如果所述第三計數器的計數值不等於0,則返回步驟①;如果所述第三計數器的計數值等於0,則確定對所述位置引用組件處理完畢。
12.如權利要求11所述的方法,其特徵在幹,所述智慧卡從所述位置引用組件數據中獲取ー個未處理的單字節索引數組元素,包括所述智慧卡從所述位置引用組件數據中獲取單字節索引數組中的未處理的當前操作數據,判斷所述單字節索引數組中的所述當前操作數據是否小於255,如果所述單字節索引數組中的所述當前操作數據不小於255,則將第四計數器的計數值更新為所述第四計數器的當前計數值與255之和,並返回步驟①;如果所述單字節索引數組中的所述當前操作數據小於255,則將第四計數器的計數值更新為所述第四計數器的當前計數值與所述單字節索引數組中的所述當前操作數之和,將所述第四計數器的計數值作為所述未處理的單字節索引數組元素;所述智慧卡從所述位置引用組件數據中獲取ー個未處理的雙字節索引數組元素,包括所述智慧卡從所述位置引用組件數據中獲取雙字節索引數組中的未處理的當前操作數據,判斷所述雙字節索引數組中的所述當前操作數據是否小於255,如果所述雙字節索引數組中的所述當前操作數據不小於255,則將第五計數器的計數值更新為所述第五計數器的當前計數值與255之和,並返回步驟①;如果所述雙字節索引數組中的所述當前操作數據小於255,則將第五計數器的計數值更新為所述第五計數器的當前計數值與所述雙字節索引數組中的所述當前操作數之和,將所述第五計數器的計數值作為所述未處理的雙字節索引數組元素。
全文摘要
本發明公開一種智慧卡處理CAP文件的方法,該方法包括以下步驟智慧卡與外部終端建立連接,進行初始化,接收CAP文件對應的APDU命令,將所述APDU命令包含的數據存儲到通信緩衝區,對卡片的第一狀態標誌位的取值進行判斷,針對不同的第二狀態標誌位的取值進行不同的操作;本發明提供的一種智慧卡處理CAP文件的方法,能夠有效的利用智慧卡存儲資源,提高CAP文件的下載速度和保證下載過程中CAP文件及智慧卡中內容的完整性。
文檔編號G06K19/07GK102591735SQ201110460179
公開日2012年7月18日 申請日期2011年12月31日 優先權日2011年12月31日
發明者於華章, 陸舟 申請人:飛天誠信科技股份有限公司

同类文章

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

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有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-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀