專利名稱:用于結(jié)構(gòu)化軟件對(duì)象的重復(fù)串行化過(guò)程的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種重復(fù)(iterative)程序,用于結(jié)構(gòu)化軟件對(duì)象到原始數(shù)據(jù)流的轉(zhuǎn)換以及反向轉(zhuǎn)換,并利用簡(jiǎn)單的通信設(shè)備如嵌入式計(jì)算機(jī)基站提供它們的直接傳輸,本發(fā)明還涉及所述軟件對(duì)象的復(fù)位或是分配給它們的存儲(chǔ)器空間的再利用。
背景技術(shù):
在以高級(jí)語(yǔ)言編寫、特別是以結(jié)構(gòu)化或面向?qū)ο蟮恼Z(yǔ)言如Java編寫的應(yīng)用程序中,所使用或處理的大部分?jǐn)?shù)據(jù)都是以軟件對(duì)象的形式組織及存儲(chǔ)的,這些對(duì)象具有精確的結(jié)構(gòu),且比簡(jiǎn)單的字節(jié)序列復(fù)雜。這些對(duì)象中可能包含多個(gè)變量或是數(shù)據(jù)組,例如在簡(jiǎn)單類型的形式中,有字符(“char”類型),或是整數(shù)(“int”類型),或是基本對(duì)象類型,或是由程序員定義的類型,字符串(“string”類型),或是含有一維或多維上述類型的數(shù)組(“array”類型)。因此,該類型的結(jié)構(gòu)化對(duì)象可由一個(gè)聚集了各種不同對(duì)象的樹(shù)狀結(jié)構(gòu)定義或表示,所述的對(duì)象本身又是各種類型的,這類結(jié)構(gòu)的組織形式有時(shí)被稱為對(duì)象復(fù)合圖。一個(gè)對(duì)象類型可以根據(jù)另一個(gè)類型(通常被稱為“超類”)的定義“繼承”地定義,并且所有的類型都可以以一種樹(shù)狀結(jié)構(gòu)來(lái)表示,該結(jié)構(gòu)被稱為繼承圖。
根據(jù)特定的情況,能夠在硬件或軟件環(huán)境中傳輸、創(chuàng)建或刪除由計(jì)算機(jī)應(yīng)用程序處理的軟件對(duì)象可能是非常有用的,這些功能在上述的環(huán)境中往往是不可能或不切實(shí)際的。
舉例來(lái)說(shuō),許多計(jì)算機(jī)應(yīng)用程序中都包含了通信過(guò)程,通信的一方是一臺(tái)計(jì)算機(jī)終端,也可能是一個(gè)計(jì)算機(jī)網(wǎng)絡(luò),另一方則是一個(gè)便攜對(duì)象或具有數(shù)據(jù)處理能力的嵌入式平臺(tái),如銀行、電話用戶或健康保健管理智能卡,也可能是計(jì)算機(jī)化的識(shí)別、標(biāo)記或收費(fèi)設(shè)備。
這些便攜對(duì)象中特別包括了一個(gè)處理器,該處理器與存有至少一個(gè)應(yīng)用程序的存儲(chǔ)設(shè)備相連,還與用來(lái)和一個(gè)或多個(gè)多個(gè)終端通信的設(shè)備相連。這些通信設(shè)備是基于例如使用不同類型技術(shù)進(jìn)行的電子數(shù)據(jù)傳輸?shù)?,比如電連接、無(wú)線電天線、光信號(hào)或其他形式的傳輸,在同一個(gè)便攜對(duì)象中可以組合多種不同類型的傳輸。由于尺寸或是某些歷史原因,通常使用的通信設(shè)備往往工作在簡(jiǎn)單的協(xié)議下,比如用于智能卡的標(biāo)準(zhǔn)ISO 7816中的APDU協(xié)議。在這些協(xié)議中,有些協(xié)議只能提供簡(jiǎn)單類型對(duì)象的傳輸(以整數(shù)或簡(jiǎn)單字符的形式),如只根據(jù)對(duì)象的響應(yīng)發(fā)送或接收的控制參數(shù),或是只由終端主動(dòng)發(fā)出,或是兩種情況兼有。以ISO 7816標(biāo)準(zhǔn)為例,APDU協(xié)議只允許傳輸不含有原始數(shù)據(jù)形式的類型的對(duì)象,如發(fā)送給計(jì)算機(jī)化的便攜對(duì)象或是根據(jù)對(duì)象的響應(yīng)獲得的字節(jié),以及只由終端主動(dòng)發(fā)出的字節(jié),作為控制參數(shù)。
在它們發(fā)展的現(xiàn)階段,這些便攜數(shù)據(jù)處理對(duì)象中的一些,如JavaCard,已經(jīng)加入了內(nèi)部函數(shù),使得它們可以直接在高級(jí)或面向?qū)ο蟮恼Z(yǔ)言-如Java中充分利用已編程的應(yīng)用程序元素,并被集成到集中式或分布式的應(yīng)用中,這些應(yīng)用可在拓展的基礎(chǔ)上進(jìn)行通信。為了與位于該類嵌入式平臺(tái)內(nèi)的應(yīng)用程序進(jìn)行通信,這種應(yīng)用程序的程序員必須避免使用結(jié)構(gòu)化的軟件對(duì)象,或是在一個(gè)接一個(gè)的基礎(chǔ)上提供對(duì)這些進(jìn)出所述嵌入式平臺(tái)的對(duì)象的傳輸?shù)闹苯犹幚怼?br>
為了充分利用該類語(yǔ)言的性能及靈活性,在編寫一個(gè)可以在該類便攜對(duì)象的處理器中執(zhí)行的應(yīng)用程序時(shí),令該應(yīng)用程序能夠很容易地與該對(duì)象以外的其他應(yīng)用程序通信是非常有用的。因此,在這種情況下,讓應(yīng)用程序能夠與所述的外界應(yīng)用程序交換它所處理的對(duì)象,而又不損失這些對(duì)象的組織或結(jié)構(gòu),是非常有用的。
在Java這樣的編程語(yǔ)言中,用于結(jié)構(gòu)化對(duì)象的串行化/反串行化的程序可能需要大量的硬件及軟件資源。這些程序特別被用來(lái)將一個(gè)結(jié)構(gòu)化對(duì)象保存為一個(gè)文件,或是在兩個(gè)程序進(jìn)程間傳輸一個(gè)結(jié)構(gòu)化的對(duì)象,所述的程序進(jìn)程在兩個(gè)不同的工作存儲(chǔ)器區(qū)域內(nèi)執(zhí)行。
然而,這些程序所需的軟件與硬件資源在某些嵌入式平臺(tái)上是沒(méi)有的,特別是其中包括Javacard。例如,傳統(tǒng)Java平臺(tái)所使用的基類要占用大于1MB的存儲(chǔ)空間(Java Developmeng Kit9MB),而標(biāo)準(zhǔn)Javacard智能卡只有16kB存儲(chǔ)容量。
傳統(tǒng)的串行化過(guò)程利用Java環(huán)境的傳統(tǒng)資源,并且它們的算法被設(shè)計(jì)成易于使用且可由計(jì)算機(jī)管理維護(hù)的。因此它們往往非常消耗存儲(chǔ)器,并且要移植到性能如此有限的嵌入式平臺(tái)上是非常復(fù)雜的,這里的性能有限是指存儲(chǔ)器容量與處理器功率及速度兩方面的。
另外,以Java為例,串行化過(guò)程使用一種普通對(duì)象類型管理器,它是在Java虛擬機(jī)(VM)中實(shí)現(xiàn)的,所述的Java虛擬機(jī)可以在各種硬件平臺(tái)上執(zhí)行。
由于改寫到嵌入式平臺(tái)上所必需的簡(jiǎn)潔程度,Javacard環(huán)境的當(dāng)前版本中不帶有類型管理器。因此,在標(biāo)準(zhǔn)Java配置中可以使用的串行化過(guò)程就不能訪問(wèn)表示結(jié)構(gòu)化對(duì)象的結(jié)構(gòu)的信息,所述的結(jié)構(gòu)化對(duì)象是要根據(jù)以APDU格式接收到的數(shù)據(jù)來(lái)重建的。
另外,在傳統(tǒng)的計(jì)算機(jī)環(huán)境中,存儲(chǔ)器設(shè)備使得以面向?qū)ο蟮木幊陶Z(yǔ)言-如Java-實(shí)現(xiàn)的串行化過(guò)程不必在意待發(fā)送的結(jié)構(gòu)化對(duì)象的大小。發(fā)送方對(duì)要發(fā)送對(duì)象的串行化可以獨(dú)立于接收方的接收而進(jìn)行,而被接收到的數(shù)據(jù)的反串行化也可以由接收方獨(dú)立于發(fā)送方或是它們的發(fā)送時(shí)間來(lái)進(jìn)行。然后,由編程環(huán)境以外的軟件機(jī)制在發(fā)送方與接收方之間發(fā)送及管理線性數(shù)據(jù)流。這些數(shù)據(jù)流可以通過(guò)高容量緩存器發(fā)送,并由其他軟件層管理,例如由TCP/IP這樣的協(xié)議來(lái)管理。
在嵌入式平臺(tái)的情況下,被用來(lái)與外界進(jìn)行數(shù)據(jù)交換的軟件機(jī)制不提供能夠保證發(fā)送數(shù)據(jù)的完整性和連續(xù)性的流管理功能。而且嵌入式平臺(tái)的有限存儲(chǔ)器資源也使其不能在發(fā)送及轉(zhuǎn)換期間儲(chǔ)存線性數(shù)據(jù)流,從而就不能存儲(chǔ)大的對(duì)象。
發(fā)明內(nèi)容
因此,本發(fā)明的目標(biāo)之一就是提出一種過(guò)程,使得使用嵌入式平臺(tái)的應(yīng)用程序的程序員能夠訪問(wèn)自動(dòng)軟件工具,該自動(dòng)軟件工具使得一個(gè)儲(chǔ)存或運(yùn)行在該類便攜對(duì)象中的軟件主體或應(yīng)用程序單元能夠從位于另一臺(tái)計(jì)算機(jī)基站上的另一個(gè)軟件主體接收或向其發(fā)送以結(jié)構(gòu)化軟件對(duì)象形式組織的數(shù)據(jù),前提是發(fā)送方與接收方之間的通信設(shè)備不允許傳輸包含所述類型對(duì)象的結(jié)構(gòu),而只允許傳輸較為簡(jiǎn)單形式的數(shù)據(jù),并且該嵌入式平臺(tái)的軟件與硬件資源不足以支持使用傳統(tǒng)的串行化過(guò)程。
該目標(biāo)由一個(gè)數(shù)據(jù)轉(zhuǎn)換過(guò)程實(shí)現(xiàn),該過(guò)程可被計(jì)算機(jī)基站或嵌入式平臺(tái)使用,其包括便攜式對(duì)象,該便攜式對(duì)象中至少包括一個(gè)處理器、存儲(chǔ)設(shè)備以及能夠以一個(gè)或多個(gè)線性數(shù)據(jù)序列的形式與一個(gè)終端交換信息的通信設(shè)備,該過(guò)程的特點(diǎn)在于它包括一個(gè)數(shù)據(jù)集轉(zhuǎn)換步驟,這種轉(zhuǎn)換是雙向的,轉(zhuǎn)換的一方是線性數(shù)據(jù)序列排列,另一方則是一種結(jié)構(gòu)化的排列,這種結(jié)構(gòu)化的排列描述或代表了一個(gè)或多個(gè)軟件對(duì)象,這些軟件對(duì)象是根據(jù)面向?qū)ο缶幊陶Z(yǔ)言的規(guī)范結(jié)構(gòu)化或?qū)哟位摹?br>
根據(jù)本發(fā)明的一項(xiàng)特性,所述的過(guò)程包括下列步驟-待發(fā)送的第一數(shù)據(jù)集的轉(zhuǎn)換或串行化,從描述或代表該對(duì)象的結(jié)構(gòu)化排列到代表該第一數(shù)據(jù)集的線性數(shù)據(jù)序列,所述的數(shù)據(jù)集包含或代表了一個(gè)或多個(gè)軟件對(duì)象,且該數(shù)據(jù)集根據(jù)一種面向?qū)ο蟮木幊陶Z(yǔ)言的規(guī)則被結(jié)構(gòu)化或?qū)哟位?利用通信設(shè)備將該線性數(shù)據(jù)序列從嵌入式平臺(tái)發(fā)往至少一臺(tái)主機(jī),即一臺(tái)終端或與終端相連的計(jì)算機(jī)基站,或是從該主機(jī)發(fā)往嵌入式平臺(tái);-在發(fā)送后將該線性數(shù)據(jù)序列轉(zhuǎn)換或反串行化為排列成一個(gè)或多個(gè)結(jié)構(gòu)化軟件對(duì)象的數(shù)據(jù)集,所述的結(jié)構(gòu)化軟件對(duì)象重現(xiàn)或代表了第一數(shù)據(jù)集。
根據(jù)本發(fā)明的另一項(xiàng)特性,主機(jī)終端利用一個(gè)軟件主體向嵌入式平臺(tái)發(fā)送信息,所述的軟件主體被稱為發(fā)送函數(shù),所述的信息在嵌入式平臺(tái)中被一個(gè)響應(yīng)函數(shù)接收,該函數(shù)可以借助儲(chǔ)存在嵌入式平臺(tái)中的至少一個(gè)接收方軟件主體開(kāi)始對(duì)這些數(shù)據(jù)進(jìn)行處理,所述接收方軟件主體還構(gòu)成了至少一個(gè)應(yīng)用程序的一部分,所述過(guò)程包括下列步驟-由代表接收方主體的通信主體接收一個(gè)數(shù)據(jù)集,該數(shù)據(jù)集是由所述響應(yīng)函數(shù)為所述的接收方軟件主體接收的,所述的數(shù)據(jù)集被排列成線性數(shù)據(jù)序列;-將該數(shù)據(jù)集轉(zhuǎn)換為至少一個(gè)軟件對(duì)象,該軟件對(duì)象根據(jù)一種面向?qū)ο蟮木幊陶Z(yǔ)言被結(jié)構(gòu)化或?qū)哟位?將該結(jié)構(gòu)化的軟件對(duì)象發(fā)送給接收方主體,并由所述的接收方主體根據(jù)所述的對(duì)象開(kāi)始進(jìn)行處理。
根據(jù)本發(fā)明的一項(xiàng)特性,所述過(guò)程包括下列步驟-由所述響應(yīng)函數(shù)從主機(jī)發(fā)送函數(shù)以至少一個(gè)發(fā)送參數(shù)的形式接收至少一個(gè)數(shù)據(jù)項(xiàng),并將該參數(shù)發(fā)送給一個(gè)通信主體,該通信主體儲(chǔ)存或運(yùn)行在嵌入式平臺(tái)上;-由通信主體將響應(yīng)主體發(fā)來(lái)的至少一個(gè)發(fā)送參數(shù)轉(zhuǎn)換或拼接成線性數(shù)據(jù)序列形式的數(shù)據(jù)集,并將這些數(shù)據(jù)儲(chǔ)存在嵌入式平臺(tái)中的一個(gè)輸入流中;-由儲(chǔ)存或運(yùn)行在嵌入式平臺(tái)上的串行化主體將儲(chǔ)存在該輸入流中的至少一部分?jǐn)?shù)據(jù)轉(zhuǎn)換或反串行化成一個(gè)數(shù)據(jù)集,該數(shù)據(jù)集包括或代表了至少一個(gè)結(jié)構(gòu)化的軟件對(duì)象;-由接收方主體接收該結(jié)構(gòu)化的軟件對(duì)象或其相關(guān)對(duì)象。
根據(jù)本發(fā)明的一項(xiàng)特性,所述過(guò)程包括下列步驟-將一個(gè)結(jié)構(gòu)化的軟件對(duì)象或其代表物從一個(gè)軟件主體發(fā)送給一個(gè)串行化主體,所述的軟件主體構(gòu)成了運(yùn)行或儲(chǔ)存在嵌入式平臺(tái)上的一個(gè)應(yīng)用程序的一部分,所述的串行化主體運(yùn)行或儲(chǔ)存在所述的嵌入式平臺(tái)上;-由所述的串行化主體將所述的結(jié)構(gòu)化軟件對(duì)象轉(zhuǎn)換或串行化成線性數(shù)據(jù)序列形式的數(shù)據(jù)集,并將這些數(shù)據(jù)儲(chǔ)存在嵌入式平臺(tái)的輸出流中;-由一個(gè)儲(chǔ)存或運(yùn)行在嵌入式平臺(tái)上的通信主體將存儲(chǔ)在該輸出流中的至少一部分?jǐn)?shù)據(jù)轉(zhuǎn)換成一組響應(yīng)參數(shù),這些參數(shù)適合由所述響應(yīng)函數(shù)發(fā)送;-由響應(yīng)函數(shù)將這些響應(yīng)參數(shù)從嵌入式平臺(tái)發(fā)往主機(jī)終端,這一過(guò)程是響應(yīng)函數(shù)的主動(dòng)行為,也可以是對(duì)主機(jī)終端的發(fā)送函數(shù)的響應(yīng)。
根據(jù)本發(fā)明的一項(xiàng)特性,儲(chǔ)存在輸入流或輸出流中的線性數(shù)據(jù)序列代表了一個(gè)或多個(gè)軟件對(duì)象,利用一個(gè)或多個(gè)被稱為標(biāo)簽的數(shù)據(jù)項(xiàng)將所述的軟件對(duì)象結(jié)構(gòu)化或?qū)哟位?,所述的?biāo)簽具有一個(gè)或多個(gè)指定的值,每個(gè)值代表一種指定的行為,所述的行為對(duì)所述線性數(shù)據(jù)序列的反串行化執(zhí)行。
根據(jù)本發(fā)明的一項(xiàng)特性,至少有一個(gè)標(biāo)簽被定義為代表下列行為中的一種-向結(jié)構(gòu)化對(duì)象的結(jié)構(gòu)中添加新元素,所述的結(jié)構(gòu)化對(duì)象是由線性數(shù)據(jù)序列表示的;-引用一個(gè)元素或?qū)ο螅鳛樵磳?duì)象,其作為構(gòu)成所述結(jié)構(gòu)化對(duì)象的一個(gè)元素的全部或部分的值的源;-標(biāo)明之后的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)代表了構(gòu)成所述結(jié)構(gòu)化對(duì)象的元素的內(nèi)容;-標(biāo)明缺少構(gòu)成所述結(jié)構(gòu)化對(duì)象的一個(gè)元素的內(nèi)容。
根據(jù)本發(fā)明的一項(xiàng)特性,串行化主體根據(jù)一種被稱為串行化過(guò)程的過(guò)程將一個(gè)被稱為源對(duì)象的結(jié)構(gòu)化對(duì)象串行化成一個(gè)線性數(shù)據(jù)集,所述的過(guò)程至少要處理一個(gè)被稱為元素的對(duì)象,這些元素構(gòu)成了該結(jié)構(gòu)化源對(duì)象的結(jié)構(gòu)或樹(shù)狀結(jié)構(gòu),所述的串行化過(guò)程要經(jīng)過(guò)下列步驟-由串行化主體檢測(cè)一個(gè)元素的類型,該元素被稱為當(dāng)前對(duì)象,它構(gòu)成了所述結(jié)構(gòu)化對(duì)象的結(jié)構(gòu)或樹(shù)狀結(jié)構(gòu);-將一個(gè)數(shù)據(jù)項(xiàng)存儲(chǔ)在輸出流中,該數(shù)據(jù)項(xiàng)代表了一個(gè)表示添加新元素的標(biāo)簽,該數(shù)據(jù)項(xiàng)之后跟隨著一個(gè)代表當(dāng)前對(duì)象類型的數(shù)據(jù)項(xiàng);-由一個(gè)串行化主體將與當(dāng)前對(duì)象類型相關(guān)聯(lián)的類型存儲(chǔ)到輸出流中,該類型緊隨著已經(jīng)存在于該輸出流中的元素■可以借助于代表全部或部分結(jié)構(gòu)化對(duì)象的值的數(shù)據(jù)項(xiàng),■也可以借助于代表了一個(gè)標(biāo)簽的數(shù)據(jù)項(xiàng),該標(biāo)簽表明要參照一個(gè)對(duì)象,其作為全部或部分結(jié)構(gòu)化對(duì)象的值的源,所述的標(biāo)簽之后跟隨著標(biāo)識(shí)所述源對(duì)象的數(shù)據(jù)項(xiàng)。
根據(jù)本發(fā)明的一項(xiàng)特性,串行化過(guò)程將一個(gè)結(jié)構(gòu)化對(duì)象轉(zhuǎn)換成輸出流,將每個(gè)當(dāng)前對(duì)象的類型存儲(chǔ)在一個(gè)存儲(chǔ)器堆棧中,該堆棧被稱為類型堆棧,由所述程序的連續(xù)重復(fù)過(guò)程按存儲(chǔ)順序的相反順序讀取所述對(duì)象。
根據(jù)本發(fā)明的一項(xiàng)特性,串行化主體借助一個(gè)被稱為反串行化的過(guò)程將一個(gè)線性數(shù)據(jù)集反串行化成至少一個(gè)結(jié)構(gòu)化的結(jié)果對(duì)象,所述反串行化過(guò)程通過(guò)下列步驟對(duì)存儲(chǔ)在輸入流中的每一個(gè)數(shù)據(jù)項(xiàng)進(jìn)行處理-由串行化主體讀取至少一個(gè)存儲(chǔ)在輸入流中的數(shù)據(jù)項(xiàng),所述的數(shù)據(jù)項(xiàng)是跟隨在先前已處理的數(shù)據(jù)之后的;-分析該數(shù)據(jù)項(xiàng),并執(zhí)行對(duì)應(yīng)于該數(shù)據(jù)項(xiàng)的行為;本發(fā)明的目標(biāo)之一是還要提出一種該類型的結(jié)構(gòu)化對(duì)象傳輸過(guò)程,從而能夠在一臺(tái)主機(jī)與嵌入式平臺(tái)之間傳輸軟件對(duì)象,其中所述嵌入式平臺(tái)的工作環(huán)境不含有用于所述結(jié)構(gòu)化對(duì)象的類型管理器。
該目標(biāo)由上述的數(shù)據(jù)轉(zhuǎn)換過(guò)程實(shí)現(xiàn),其特征在于所述的反串行化過(guò)程包括載入一個(gè)被稱為當(dāng)前對(duì)象的元素,即向所述當(dāng)前對(duì)象的全部或部分指定一個(gè)直接或間接值,所述的元素構(gòu)成了結(jié)構(gòu)化結(jié)果對(duì)象的結(jié)構(gòu)的全部或部分,當(dāng)前對(duì)象載入的終止啟動(dòng)了-讀取儲(chǔ)存在存儲(chǔ)器結(jié)構(gòu)的下一個(gè)位置中的代表對(duì)象類型的數(shù)據(jù)項(xiàng),并將該數(shù)據(jù)項(xiàng)從該位置刪除,該存儲(chǔ)器結(jié)構(gòu)被稱為類型堆棧;-把從類型堆棧中讀出的數(shù)據(jù)所代表的類型儲(chǔ)存起來(lái),作為新的當(dāng)前對(duì)象的類型。
根據(jù)本發(fā)明的一項(xiàng)特性,由反串行化過(guò)程創(chuàng)建的結(jié)構(gòu)化對(duì)象被認(rèn)為是完整的,并在類型堆棧為空時(shí)被發(fā)送給作為接收方的軟件主體或應(yīng)用程序。
根據(jù)本發(fā)明的一項(xiàng)特性,對(duì)應(yīng)于某數(shù)據(jù)項(xiàng)的反串行化操作包括下列步驟,所述的數(shù)據(jù)項(xiàng)代表了一個(gè)標(biāo)簽,該標(biāo)簽被稱為“NEW”標(biāo)簽并標(biāo)明一個(gè)新元素-讀取輸入流中的至少一個(gè)后續(xù)數(shù)據(jù)項(xiàng);-將該后續(xù)數(shù)據(jù)項(xiàng)所代表的對(duì)象類型存儲(chǔ)在存儲(chǔ)器堆棧中,讓它緊接著可能已經(jīng)儲(chǔ)存在該堆棧中的類型,所述的堆棧被稱為類型堆棧。
根據(jù)本發(fā)明的一項(xiàng)特性,所述反串行化過(guò)程所使用的堆棧類型包括LIFO類型堆棧,也就是說(shuō)在該堆棧中是以存儲(chǔ)順序相反的順序讀取各存儲(chǔ)位置的。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的反串行化過(guò)程包括一個(gè)步驟,該步驟通過(guò)分配一個(gè)新的存儲(chǔ)器空間或重新利用一個(gè)自由分配空間來(lái)創(chuàng)建一個(gè)元素,該元素構(gòu)成了結(jié)構(gòu)化結(jié)果軟件對(duì)象的結(jié)構(gòu),所述的創(chuàng)建過(guò)程由一個(gè)類型管理器主體根據(jù)要被創(chuàng)建的元素的類型來(lái)完成。
根據(jù)本發(fā)明的一項(xiàng)特性,構(gòu)成結(jié)構(gòu)化結(jié)果軟件對(duì)象結(jié)構(gòu)的元素的創(chuàng)建步驟是在一個(gè)標(biāo)明創(chuàng)建該元素的數(shù)據(jù)項(xiàng)的讀取步驟與所述元素的第一載入步驟之間進(jìn)行的。
根據(jù)本發(fā)明的一項(xiàng)特性,對(duì)應(yīng)于某個(gè)數(shù)據(jù)項(xiàng)的行為包括將該數(shù)據(jù)項(xiàng)的值存儲(chǔ)在分配給當(dāng)前對(duì)象的存儲(chǔ)器空間中的步驟,其中所述的數(shù)據(jù)項(xiàng)被稱為簡(jiǎn)單數(shù)據(jù)項(xiàng),即一個(gè)不代表標(biāo)簽的數(shù)據(jù)項(xiàng)。
根據(jù)本發(fā)明的一項(xiàng)特性,在反串行化過(guò)程期間,一個(gè)對(duì)象標(biāo)號(hào)被分配給構(gòu)成所述結(jié)構(gòu)化結(jié)果對(duì)象的至少一個(gè)元素,所述的對(duì)象標(biāo)號(hào)唯一地標(biāo)識(shí)了所述的元素,使得該元素可以被指定給其他對(duì)象或元素,或是被其他對(duì)象或元素引用。
根據(jù)本發(fā)明的一項(xiàng)特性,對(duì)應(yīng)于某數(shù)據(jù)項(xiàng)的行為包括下列步驟,其中所述的數(shù)據(jù)項(xiàng)代表一個(gè)標(biāo)簽,該標(biāo)簽被稱為“REF”標(biāo)簽并標(biāo)明一項(xiàng)引用-讀取輸入流中的至少一個(gè)后續(xù)數(shù)據(jù)項(xiàng);
-將一個(gè)數(shù)據(jù)項(xiàng)存儲(chǔ)到分配給當(dāng)前對(duì)象的存儲(chǔ)器空間中,緊接著已經(jīng)存儲(chǔ)的數(shù)據(jù)項(xiàng),所述的數(shù)據(jù)項(xiàng)指定了一個(gè)對(duì)象作為全部或部分當(dāng)前對(duì)象的值的源,所述的源對(duì)象或元素由所述的后續(xù)數(shù)據(jù)項(xiàng)標(biāo)識(shí)。
根據(jù)本發(fā)明的一項(xiàng)特性,當(dāng)存儲(chǔ)在分配給所述對(duì)象的存儲(chǔ)器空間中的數(shù)據(jù)達(dá)到指定長(zhǎng)度時(shí),就考慮應(yīng)該終止當(dāng)前對(duì)象的載入,所述的長(zhǎng)度由存儲(chǔ)在嵌入式平臺(tái)上的類型管理器主體或是用于所述類型的管理器主體從卡式存儲(chǔ)器中讀出。
根據(jù)本發(fā)明的一項(xiàng)特性,從嵌入式平臺(tái)向主機(jī)發(fā)送指定長(zhǎng)度的線性數(shù)據(jù)序列是由一個(gè)重復(fù)過(guò)程完成的,該過(guò)程被稱為數(shù)據(jù)讀取過(guò)程,該過(guò)程包括下列遞歸步驟-由主機(jī)發(fā)送一條通信指令,該指令中包括至少一個(gè)發(fā)送參數(shù),該參數(shù)代表了已經(jīng)接收到的數(shù)據(jù)的長(zhǎng)度;-由嵌入式平臺(tái)接收所述的發(fā)射參數(shù),并將其與要被發(fā)送的線性數(shù)據(jù)序列做比較;-通過(guò)發(fā)送至少一個(gè)返回參數(shù)來(lái)響應(yīng)所述的通信指令,所述的返回參數(shù)代表了緊接著已被主機(jī)接收到的數(shù)據(jù)之后的數(shù)據(jù)項(xiàng)或項(xiàng)目;-由發(fā)出通信指令的主機(jī)接收返回參數(shù),并將該參數(shù)所代表的數(shù)據(jù)存儲(chǔ)到已經(jīng)接收到的數(shù)據(jù)之后。
根據(jù)本發(fā)明的一項(xiàng)特性,由嵌入式平臺(tái)從主機(jī)接收指定長(zhǎng)度的線性數(shù)據(jù)序列,是在一個(gè)重復(fù)過(guò)程之后執(zhí)行的,該過(guò)程被稱為數(shù)據(jù)寫入過(guò)程,它包括下列遞歸步驟-由主機(jī)發(fā)送一條通信指令,該指令帶有至少一個(gè)代表數(shù)據(jù)項(xiàng)或項(xiàng)目的第一發(fā)送參數(shù),所述的數(shù)據(jù)項(xiàng)緊隨著待發(fā)射線性數(shù)據(jù)序列中已經(jīng)被發(fā)送的那部分,并且在恰當(dāng)?shù)那闆r下,所述的指令中還帶有一個(gè)第二發(fā)送參數(shù),該參數(shù)代表了第一發(fā)送參數(shù)所代表的數(shù)據(jù)在待發(fā)射序列中的位置,或是已經(jīng)發(fā)送的數(shù)據(jù)的長(zhǎng)度。
-由嵌入式平臺(tái)接收所述的一個(gè)或多個(gè)通信指令發(fā)送參數(shù);-將第一發(fā)送參數(shù)所代表的數(shù)據(jù)存儲(chǔ)在嵌入式平臺(tái)上的輸入流中,緊接著已被接收的數(shù)據(jù)之后。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的數(shù)據(jù)寫入過(guò)程還包括下列步驟-由嵌入式平臺(tái)對(duì)第二發(fā)送參數(shù)進(jìn)行比較,并與已經(jīng)接收到的數(shù)據(jù)的長(zhǎng)度做比較;-由嵌入式平臺(tái)返回至少一個(gè)響應(yīng)參數(shù),該參數(shù)代表了已被接收到的數(shù)據(jù)的長(zhǎng)度,或是代表表示比較結(jié)果的數(shù)據(jù)項(xiàng),或是兩者都包括。
本發(fā)明的目標(biāo)之一是還要提出一種該類型的結(jié)構(gòu)化對(duì)象傳輸過(guò)程,從而可以發(fā)送相對(duì)于上述通信設(shè)施來(lái)說(shuō)在傳輸或臨時(shí)存儲(chǔ)大小上都具有較大尺寸的軟件對(duì)象,或是無(wú)限大小的軟件對(duì)象。
該目標(biāo)由上述的數(shù)據(jù)轉(zhuǎn)換過(guò)程實(shí)現(xiàn),其特征在于至少有兩個(gè)串行化、反串行化、數(shù)據(jù)讀取或數(shù)據(jù)寫入過(guò)程被并行執(zhí)行,或是通過(guò)重復(fù)一個(gè)步驟被交織執(zhí)行,所述步驟包括連續(xù)執(zhí)行這些過(guò)程中的每一個(gè)過(guò)程的至少一個(gè)步驟。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的輸入流、輸出流或兩者都被存儲(chǔ)在循環(huán)存儲(chǔ)器結(jié)構(gòu)形式中,這兩個(gè)流可以共用同一個(gè)循環(huán)結(jié)構(gòu)。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的嵌入式平臺(tái)具有一個(gè)可編程的環(huán)境,它能夠存儲(chǔ)并執(zhí)行至少一個(gè)由程序員創(chuàng)建的應(yīng)用程序,所述的通信功能與標(biāo)準(zhǔn)ISO 7816中所定義的APDU格式兼容。
根據(jù)本發(fā)明的一項(xiàng)特性,用于被接收對(duì)象的反串行化及后續(xù)處理工作在接收到至少一條APDU格式的指令時(shí)啟動(dòng),該指令中含有至少一個(gè)數(shù)據(jù)項(xiàng),該數(shù)據(jù)項(xiàng)表示接收結(jié)構(gòu)化對(duì)象。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的嵌入式平臺(tái)具有一個(gè)與JavaCard標(biāo)準(zhǔn)兼容的可編程環(huán)境。
根據(jù)本發(fā)明的一項(xiàng)特性,在主機(jī)或嵌入式平臺(tái)上執(zhí)行的至少一個(gè)應(yīng)用程序是以Java語(yǔ)言編寫的。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的過(guò)程被用于至少一個(gè)被稱為卡主體的軟件主體和至少一個(gè)被稱為卡引擎代理主體的軟件主體之間的通信,前者被儲(chǔ)存或執(zhí)行在嵌入式平臺(tái)上,后者則被儲(chǔ)存或執(zhí)行在至少一臺(tái)主機(jī)上,該主機(jī)屬于一個(gè)計(jì)算機(jī)網(wǎng)絡(luò),該網(wǎng)絡(luò)利用AAAMOM類型的軟件基礎(chǔ)設(shè)施借助異步消息進(jìn)行通信,所述的卡引擎代理主體為所述的卡主體與所述網(wǎng)絡(luò)中其他主體間的通信起到了中介的作用,所述的主體根據(jù)所述軟件基礎(chǔ)設(shè)施的規(guī)范工作,并且該主體屬于至少一個(gè)分布式的應(yīng)用程序。
另外,在某些環(huán)境或操作系統(tǒng)中,例如在JavaCard這樣的嵌入式平臺(tái)的環(huán)境下,不存在任何程序、或是只有嚴(yán)重消耗資源的復(fù)雜程序可以用于在該類軟件對(duì)象不再有用時(shí)將它刪除,或是釋放它所占用的存儲(chǔ)空間。因此,在這種情況下往往需要進(jìn)行手動(dòng)刪除,從而必須由應(yīng)用程序程序員直接并且是在一個(gè)接一個(gè)的基礎(chǔ)上提供手動(dòng)刪除功能。
因此,本發(fā)明的目標(biāo)之一是還要提出一種過(guò)程,它為基于嵌入式平臺(tái)的應(yīng)用程序的程序員提供了軟件工具,這些工具允許重新使用被某些結(jié)構(gòu)化軟件對(duì)象中的全部或一部分占用的存儲(chǔ)空間,這些軟件對(duì)象被一個(gè)數(shù)據(jù)處理基站中的應(yīng)用程序所使用,該處理基站可以是便攜的,也可以不是。
擁有這些軟件工具對(duì)于具有非線性結(jié)構(gòu)的軟件對(duì)象的簡(jiǎn)單復(fù)制來(lái)說(shuō)也是非常有用的,例如樹(shù)狀結(jié)構(gòu)形式。
因此,本發(fā)明的目標(biāo)之一是要提出一種過(guò)程,它為基于嵌入式平臺(tái)的應(yīng)用程序的程序員提供了用于將結(jié)構(gòu)化軟件對(duì)象復(fù)制成另一個(gè)對(duì)象的軟件工具,被復(fù)制的軟件對(duì)象被稱為源對(duì)象,復(fù)制后的對(duì)象被稱為結(jié)果對(duì)象,該結(jié)果對(duì)象含有與源對(duì)象相同的值,但是在存儲(chǔ)上構(gòu)成一個(gè)不同的對(duì)象。
同樣,為了安全性的原因,當(dāng)該類軟件對(duì)象所占用的存儲(chǔ)空間被釋放后,從所述空間刪除來(lái)自該對(duì)象的信息至關(guān)重要,這是為了防止所述信息被接著利用相同存儲(chǔ)空間的另一個(gè)對(duì)象或另一個(gè)應(yīng)用程序讀取。因此,該信息必須被手動(dòng)刪除,該功能由應(yīng)用程序程序員直接地并且在一個(gè)接一個(gè)的基礎(chǔ)上提供。
因此,本發(fā)明的目標(biāo)之一是提出一種過(guò)程,它為基于嵌入式平臺(tái)的應(yīng)用程序的程序員提供了軟件工具,在刪除所述對(duì)象或重用該類軟件對(duì)象所使用的所述空間時(shí),可利用該工具刪除或均勻化存儲(chǔ)空間中包含的信息。
因此,本發(fā)明提出了一種如上所述的過(guò)程,其特征在于數(shù)據(jù)讀出、數(shù)據(jù)寫入、反串行化以及串行化過(guò)程都通過(guò)它們的實(shí)現(xiàn)被應(yīng)用在至少一個(gè)儲(chǔ)存在主機(jī)或嵌入式平臺(tái)中的類上,所述的實(shí)現(xiàn)包括下列指令中的至少一種-對(duì)象寫入指令,通過(guò)使用對(duì)應(yīng)于某對(duì)象的串行化過(guò)程并接著執(zhí)行數(shù)據(jù)寫入過(guò)程和反串行化過(guò)程,將一個(gè)結(jié)構(gòu)化對(duì)象發(fā)送給至少一個(gè)嵌入式平臺(tái)的主體;-對(duì)象讀出指令,通過(guò)使用串行化過(guò)程并接著執(zhí)行數(shù)據(jù)讀出程序和反串行化過(guò)程,從至少一個(gè)嵌入式平臺(tái)的主體中讀出一個(gè)結(jié)構(gòu)化對(duì)象;-用于儲(chǔ)存在嵌入式平臺(tái)中的結(jié)構(gòu)化對(duì)象的解除分配指令,該指令利用了串行化過(guò)程,后者還包括將分配給所述對(duì)象的各個(gè)組成部分的存儲(chǔ)空間釋放或解除分配的步驟,所述串行化過(guò)程是在分析所述組成部分的結(jié)構(gòu)之后進(jìn)行的;-用于被一個(gè)結(jié)構(gòu)化對(duì)象釋放的存儲(chǔ)空間的內(nèi)部管理或刪除指令,該指令利用反串行化過(guò)程從一個(gè)給定的線性數(shù)據(jù)序列創(chuàng)建一個(gè)具有非實(shí)質(zhì)內(nèi)容的對(duì)象;-用于結(jié)構(gòu)化源對(duì)象的復(fù)制指令,該指令利用串行化過(guò)程來(lái)創(chuàng)建一個(gè)代表該對(duì)象的線性數(shù)據(jù)序列,但不對(duì)所述源對(duì)象進(jìn)行解除分配,隨后利用反串行化過(guò)程,由該線性數(shù)據(jù)序列創(chuàng)建另一個(gè)結(jié)構(gòu)化對(duì)象,該對(duì)象的內(nèi)容與源對(duì)象完全相同。
根據(jù)本發(fā)明的一項(xiàng)特性,用于嵌入式平臺(tái)的編程語(yǔ)言包括一個(gè)第一類(IOApplet),該類描述了一種ProcessAPDU抽象方法,該方法在接收到APDU消息時(shí)在應(yīng)用程序中啟動(dòng)一個(gè)用戶定義的進(jìn)程;在嵌入式平臺(tái)上執(zhí)行反串行化操作的程序代碼被儲(chǔ)存在所述的嵌入式平臺(tái)中,為所述ProcessAPDU抽象方法的具體實(shí)現(xiàn),在從第一類(IOApplet)繼承而來(lái)的第二類(ObjectIOApplet)中,所述的程序代碼調(diào)用一個(gè)ProcessObject方法,后者在同一實(shí)現(xiàn)類(ObjectIOApplet)中被描述為一個(gè)抽象方法。
根據(jù)本發(fā)明的一項(xiàng)特性,用于所述嵌入式平臺(tái)的編程語(yǔ)言中含有一個(gè)第一類(IOApplet),該類描述了一個(gè)SendAPDU方法,該方法將一個(gè)APDU格式的消息發(fā)送給主機(jī);在嵌入式平臺(tái)上執(zhí)行所述串行化操作的程序代碼被儲(chǔ)存在從第一類(IOApplet)繼承而來(lái)的第二類(ObjectIOApplet)中,用于使用SendAPDU方法的至少一個(gè)SendObject方法的具體實(shí)現(xiàn)。
本發(fā)明的另一個(gè)目標(biāo)是提出一種計(jì)算機(jī)系統(tǒng),該系統(tǒng)包括一個(gè)便攜對(duì)象以及上述類型的軟件工具。
該目標(biāo)由一種計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn),該計(jì)算機(jī)系統(tǒng)由一個(gè)計(jì)算機(jī)基站構(gòu)成,它被稱為嵌入式平臺(tái),該嵌入式平臺(tái)包括一個(gè)便攜對(duì)象,該便攜對(duì)象至少包含一個(gè)處理器、存儲(chǔ)設(shè)備以及通信設(shè)備,所述的通信設(shè)備能夠以一個(gè)或多個(gè)線性數(shù)據(jù)序列的形式與一個(gè)終端交換信息,所述嵌入式平臺(tái)的特征在于,該平臺(tái)帶有一個(gè)串行化主體,它能夠?qū)σ粋€(gè)數(shù)據(jù)集合執(zhí)行一個(gè)方向或另一個(gè)方向的轉(zhuǎn)換步驟,轉(zhuǎn)換的一方是一種線性數(shù)據(jù)序列排列,另一方是代表一個(gè)或多個(gè)軟件對(duì)象的結(jié)構(gòu)化排列,這種結(jié)構(gòu)化排列是根據(jù)一種面向?qū)ο缶幊陶Z(yǔ)言的規(guī)范被結(jié)構(gòu)化或?qū)哟位摹?br>
根據(jù)本發(fā)明的一項(xiàng)特性,所述的嵌入式平臺(tái)包括一個(gè)通信主體,它能夠-代表接收方主體來(lái)接收一個(gè)數(shù)據(jù)集,該數(shù)據(jù)集是響應(yīng)函數(shù)為儲(chǔ)存在嵌入式平臺(tái)上的接收方軟件主體接收的,所述的數(shù)據(jù)集被組織成一個(gè)或多個(gè)線性數(shù)據(jù)序列;-將該數(shù)據(jù)集轉(zhuǎn)換成至少一個(gè)軟件對(duì)象,該軟件對(duì)象根據(jù)一種面向?qū)ο缶幊陶Z(yǔ)言的規(guī)范被結(jié)構(gòu)化或?qū)哟位?;以?將該結(jié)構(gòu)化的軟件對(duì)象發(fā)送給接收方主體,并由接收方主體根據(jù)該對(duì)象開(kāi)始處理。
根據(jù)本發(fā)明的一項(xiàng)特性,代表一個(gè)結(jié)構(gòu)化軟件對(duì)象的線性數(shù)據(jù)序列被儲(chǔ)存在嵌入式平臺(tái)的一個(gè)輸入或輸出流中,所述的嵌入式平臺(tái)包括一個(gè)被稱為串行化主體的軟件主體,它能夠創(chuàng)建所述嵌入式平臺(tái)中的輸入流所代表的一個(gè)或多個(gè)結(jié)構(gòu)化對(duì)象,即反串行化所述的結(jié)構(gòu)化對(duì)象,或是將代表待發(fā)送的一個(gè)或多個(gè)結(jié)構(gòu)化對(duì)象的數(shù)據(jù)寫入到輸出流中,即串行化所述的結(jié)構(gòu)化對(duì)象。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的輸入流或輸出流被儲(chǔ)存成一個(gè)或多個(gè)循環(huán)存儲(chǔ)結(jié)構(gòu)的形式。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的串行化主體使用一個(gè)被稱為類型堆棧的存儲(chǔ)器堆棧來(lái)儲(chǔ)存至少一個(gè)對(duì)象的類型,所述至少一個(gè)對(duì)象構(gòu)成了要被串行化或反串行化的結(jié)構(gòu)化對(duì)象結(jié)構(gòu)的全部或部分,所述的類型堆棧擁有多個(gè)存儲(chǔ)位置,這些存儲(chǔ)位置只能在最近載入的存儲(chǔ)位置被讀出并刪除之后才能被訪問(wèn)。
根據(jù)本發(fā)明的一項(xiàng)特性,包含在輸入或輸出流中的數(shù)據(jù)代表一個(gè)或多個(gè)結(jié)構(gòu)化對(duì)象,其使用了一種包括一組標(biāo)簽的編碼系統(tǒng),每個(gè)所述的標(biāo)簽都代表一種對(duì)線性數(shù)據(jù)序列反串行化過(guò)程執(zhí)行的指定行為。
根據(jù)本發(fā)明的一項(xiàng)特性,至少有一個(gè)標(biāo)簽被定義為代表下列行為中的一種-向線性數(shù)據(jù)序列所代表的結(jié)構(gòu)化對(duì)象結(jié)構(gòu)中加入新元素;-引用一個(gè)元素或?qū)ο?,作為源?duì)象,將其作為構(gòu)成結(jié)構(gòu)化對(duì)象的一個(gè)元素的全部或部分的值的源;-指示出隨后的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)代表了構(gòu)成所述結(jié)構(gòu)化對(duì)象的一個(gè)元素的內(nèi)容;-指示出構(gòu)成所述結(jié)構(gòu)化對(duì)象的一個(gè)元素的內(nèi)容缺失。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的嵌入式平臺(tái)包括一個(gè)便攜對(duì)象,該對(duì)象根據(jù)標(biāo)準(zhǔn)ISO 7816工作,并且使用APDU格式的指令。
根據(jù)本發(fā)明的一項(xiàng)特性,存儲(chǔ)在嵌入式平臺(tái)中的至少一個(gè)主體或應(yīng)用程序是用Java語(yǔ)言編寫的,所述的嵌入式平臺(tái)擁有一個(gè)符合JavaCard標(biāo)準(zhǔn)的計(jì)算機(jī)環(huán)境。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的系統(tǒng)在主機(jī)、嵌入式平臺(tái)或兩者中都包括至少一個(gè)軟件類,它實(shí)現(xiàn)下列指令中的至少一條-對(duì)象寫入指令,通過(guò)在主機(jī)中將結(jié)構(gòu)化對(duì)象串行化成一個(gè)數(shù)據(jù)流,并隨后將該數(shù)據(jù)流發(fā)送給嵌入式平臺(tái),來(lái)把一個(gè)結(jié)構(gòu)化對(duì)象發(fā)送給所述卡的至少一個(gè)主體,并在嵌入式平臺(tái)中將所述的數(shù)據(jù)流反串行化成結(jié)構(gòu)化對(duì)象;-對(duì)象讀取指令,通過(guò)在嵌入式平臺(tái)中將結(jié)構(gòu)化對(duì)象串行化成一個(gè)數(shù)據(jù)流,并隨后由主機(jī)從嵌入式平臺(tái)接收該數(shù)據(jù)流,來(lái)從所述卡的至少一個(gè)主體讀取一個(gè)結(jié)構(gòu)化對(duì)象,并在主機(jī)中將所述的數(shù)據(jù)流反串行化成一個(gè)結(jié)構(gòu)化對(duì)象;-解除分配指令,用于儲(chǔ)存在嵌入式平臺(tái)中的結(jié)構(gòu)化對(duì)象,在分析了所述對(duì)象各部分的結(jié)構(gòu)之后,該指令根據(jù)一個(gè)選項(xiàng)串行化所述的對(duì)象,所述的選項(xiàng)包括釋放或解除分配給該對(duì)象各個(gè)部分的存儲(chǔ)空間;-用于被嵌入式平臺(tái)中的一個(gè)結(jié)構(gòu)化對(duì)象釋放的存儲(chǔ)空間的內(nèi)部管理或刪除指令,該指令通過(guò)反串行化一個(gè)給定的線性數(shù)據(jù)序列來(lái)創(chuàng)建一個(gè)具有非實(shí)質(zhì)內(nèi)容的對(duì)象;-用于在嵌入式平臺(tái)中復(fù)制一個(gè)結(jié)構(gòu)化對(duì)象的指令,所述結(jié)構(gòu)化對(duì)象作為源對(duì)象,該指令通過(guò)串行化成代表同一個(gè)對(duì)象的線性數(shù)據(jù)序列,但不對(duì)所述源對(duì)象進(jìn)行解除分配,隨后將該線性數(shù)據(jù)序列反串行化成另一個(gè)結(jié)構(gòu)化對(duì)象,該對(duì)象的內(nèi)容與源對(duì)象完全相同。
根據(jù)本發(fā)明的一項(xiàng)特性,所述的嵌入式平臺(tái)與至少一臺(tái)屬于某個(gè)計(jì)算機(jī)網(wǎng)絡(luò)的主機(jī)進(jìn)行通信,所述的網(wǎng)絡(luò)通過(guò)符合AAA-MOM類型軟件基礎(chǔ)設(shè)施的異步消息進(jìn)行通信,所述的主機(jī)包括一個(gè)被稱為卡引擎代理主體的軟件主體,該軟件主體能夠管理所述嵌入式平臺(tái)與所述網(wǎng)絡(luò)中其他主體間的通信,所述的主體根據(jù)該軟件基礎(chǔ)設(shè)施的規(guī)范進(jìn)行工作,并且屬于至少一個(gè)分布式的應(yīng)用程序。
通過(guò)閱讀下列說(shuō)明并參照附圖,將能更清楚地了解本發(fā)明以及它的特性與優(yōu)點(diǎn),其中-圖1示出了一幅部分示意圖,該圖展示了主機(jī)或終端向嵌入式平臺(tái)上的軟件主體或從所述軟件主體進(jìn)行寫入或讀取操作時(shí)的對(duì)象傳輸及轉(zhuǎn)換,在本發(fā)明的該版本中,所述的卡只包含一個(gè)應(yīng)用程序;-圖2示出了一幅更為詳細(xì)的示意圖,該圖對(duì)應(yīng)于主機(jī)或終端向嵌入式平臺(tái)上的軟件主體或從所述軟件主體進(jìn)行讀取與寫入操作時(shí)的對(duì)象傳輸及轉(zhuǎn)換,在本發(fā)明的該版本中,所述的卡只包含一個(gè)應(yīng)用程序;-圖3示出了一幅部分示意圖,該圖展示了主機(jī)或終端向嵌入式平臺(tái)上的軟件主體或從所述軟件主體進(jìn)行寫入或讀取操作時(shí)的對(duì)象傳輸及轉(zhuǎn)換,在本發(fā)明的該版本中,所述的卡包含多個(gè)應(yīng)用程序;-圖4示出了一幅部分示意圖,該圖展示了由一個(gè)數(shù)據(jù)流反串行化成一個(gè)結(jié)構(gòu)化軟件對(duì)象時(shí)所涉及的對(duì)象與主體;-圖5示出了一幅部分示意圖,該圖展示了將一個(gè)結(jié)構(gòu)化軟件對(duì)象串行化成一個(gè)數(shù)據(jù)流時(shí)所涉及的對(duì)象與主體。
具體實(shí)施例方式
在某些語(yǔ)言中(例如“Java embarque”-Eyrolles-Paris 1999),短語(yǔ)“嵌入式計(jì)算機(jī)”被用來(lái)指代一種本身不可見(jiàn)的計(jì)算機(jī),因?yàn)樗潜患傻揭粋€(gè)擁有另一種功能的設(shè)備中去的。法語(yǔ)短語(yǔ)“ordinateurembarque”是英語(yǔ)“嵌入式計(jì)算機(jī)”的近似解釋。
該特性,即另一個(gè)設(shè)備中所提供的一種特定功能,基本上說(shuō)明了這樣一個(gè)事實(shí),即這類嵌入式計(jì)算機(jī)往往只具有有限的硬件或軟件資源,并且常常使用基本的操作系統(tǒng)或軟件環(huán)境。盡管也可以進(jìn)行擴(kuò)充增強(qiáng),但是該類計(jì)算機(jī)的資源通常只是512kb直至更低數(shù)量級(jí)的靜態(tài)存儲(chǔ)器,以及一個(gè)8bit或16bit的處理器。在智能卡的例子中,可用的RAM容量可能在4kb數(shù)量級(jí)上,對(duì)于當(dāng)前最強(qiáng)大的型號(hào)可以達(dá)到32kb。
在一般的IT背景下,短語(yǔ)“平臺(tái)”指的是至少包括一個(gè)處理器和存儲(chǔ)設(shè)備的數(shù)據(jù)處理裝置。通過(guò)拓展上述的定義,并為了在該背景下進(jìn)行說(shuō)明的目的,短語(yǔ)“嵌入式平臺(tái)”被用來(lái)指代包括該類平臺(tái)的便攜對(duì)象,所述的對(duì)象是真正便攜的或是具有很小的尺寸的,或是擁有有限處理能力或存儲(chǔ)能力的。
以下的說(shuō)明解釋了符合本發(fā)明的程序,在其對(duì)應(yīng)的版本中,指定的任務(wù)與操作分配在各個(gè)有關(guān)的主體與應(yīng)用程序之間。計(jì)算機(jī)應(yīng)用程序的靈活組織本質(zhì)上意味著這種分配可被實(shí)現(xiàn)為不同的形式,特別是在各個(gè)主體及它們的指定任務(wù)之間的差別只是抽象概念的情況下,這種差別對(duì)于它們的主要工作特性沒(méi)有影響。因此顯而易見(jiàn),符合本發(fā)明的程序也可以被實(shí)現(xiàn)在本文中未說(shuō)明的其他版本中,而不會(huì)偏離本發(fā)明的基本主旨,特別是可以按不同的方式組合為各種任務(wù)或主體提供的不同變化形式。同樣,任務(wù)在同時(shí)儲(chǔ)存在同一處的主體或應(yīng)用程序間的抽象分配,也可以本文中未說(shuō)明的不同變型版本組合起來(lái),而不會(huì)偏離本發(fā)明的基本主旨。
在以下的說(shuō)明中,主要以嵌入式平臺(tái)為例來(lái)圖解符合本發(fā)明的程序,所述的嵌入式平臺(tái)包括一塊使用JavaCard類型系統(tǒng)環(huán)境的智能卡,并且與一個(gè)終端通信,所述的終端包括一個(gè)數(shù)據(jù)處理基站,該基站執(zhí)行一個(gè)用Java語(yǔ)言編寫的應(yīng)用程序。
然而,顯而易見(jiàn)的是,符合本發(fā)明的程序也可以被應(yīng)用到其他環(huán)境,所述的其他環(huán)境中的數(shù)據(jù)傳輸函數(shù)不提供某種模式下的結(jié)構(gòu)化軟件對(duì)象傳輸,所述的模式對(duì)于程序員是開(kāi)放可見(jiàn)的。符合標(biāo)準(zhǔn)ISO7816的智能卡也可以被涉及,這類卡使用另一種編程環(huán)境,例如“Windows for SmartCards”,或是可用其他編程語(yǔ)言-如VisualBasic-編寫的環(huán)境。這一點(diǎn)同樣適用于符合其他標(biāo)準(zhǔn)的智能卡或是使用該類平臺(tái)的便攜對(duì)象或終端,所述的智能卡也在通信功能上受到類似的限制。
所述的程序還可以被應(yīng)用于包括一個(gè)嵌入式數(shù)據(jù)處理基站的任意便攜對(duì)象,而不論該嵌入式數(shù)據(jù)處理基站是否便攜,比如汽車電子器件、識(shí)別標(biāo)志、蜂窩電話或便攜采集終端。
同樣,符合本發(fā)明的程序?qū)⒅饕皇緸樯婕扒度胧狡脚_(tái)的使用,所述的嵌入式平臺(tái)與一個(gè)被稱為終端或主機(jī)的數(shù)據(jù)處理基站通信。所述的程序自然也可以被用于所述終端是構(gòu)成任意類型計(jì)算機(jī)網(wǎng)絡(luò)的一部分的基站的情況下,而不會(huì)偏離本發(fā)明的基本主旨。因此,被描述為由該終端執(zhí)行的各種功能也可以被分配在多個(gè)不同的設(shè)備之間,并且這種分配可以隨時(shí)間變化。勿庸置疑,所述的程序也可以被應(yīng)用在所述嵌入式平臺(tái)直接或間接與一個(gè)或多個(gè)其他嵌入平臺(tái)通信的情況下,同樣也不會(huì)偏離本發(fā)明的基本主旨。籠統(tǒng)地說(shuō),主機(jī)或主機(jī)終端被定義為與嵌入式平臺(tái)通信的應(yīng)用程序或基站。
符合本發(fā)明的程序尤其可被應(yīng)用于智能卡-例如符合JavaCard標(biāo)準(zhǔn)的-與計(jì)算機(jī)網(wǎng)絡(luò)-例如用Java語(yǔ)言編寫的-通信,所述的通信通過(guò)符合AAA-MOM類型軟件基礎(chǔ)設(shè)施的異步消息進(jìn)行。在這種情況下,所述的卡與所述網(wǎng)絡(luò)其他部分間的通信通常由一個(gè)被稱為卡主體代理主體的軟件主體管理,該主體為各個(gè)軟件主體起到了中間媒介的作用,所述各個(gè)軟件主體被稱為卡主體,它們被存儲(chǔ)在所述的卡上。在卡環(huán)境中,這些卡主體由一個(gè)被稱為卡引擎主體的軟件主體管理或協(xié)調(diào),或兩者皆有。
然后,符合本發(fā)明的程序讓該卡引擎主體與卡引擎代理主體通信,以便根據(jù)Java語(yǔ)言或AAA基礎(chǔ)設(shè)施標(biāo)準(zhǔn)交換結(jié)構(gòu)化軟件對(duì)象。能夠與外界交換結(jié)構(gòu)化對(duì)象這一事實(shí)使得所述的卡能夠?qū)崿F(xiàn)與AAA基礎(chǔ)設(shè)施的增強(qiáng)兼容性,并且可以被網(wǎng)絡(luò)中的其他AAA主體視為AAA類型的主體本身。
符合本發(fā)明的程序還可以被應(yīng)用于智能卡-例如符合JavaCard標(biāo)準(zhǔn)的-與計(jì)算機(jī)網(wǎng)絡(luò)-例如用Java編寫的-之間的通信,所述的通信通過(guò)面向?qū)ο蟮腞PC(遠(yuǎn)程程序呼叫)協(xié)議進(jìn)行,例如帶有Java RMI(遠(yuǎn)程方法調(diào)用)或COBRA類型軟件基礎(chǔ)設(shè)施的協(xié)議。
如果一個(gè)應(yīng)用程序需要從一個(gè)終端向一個(gè)含有智能卡的嵌入式平臺(tái)傳輸軟件對(duì)象,這種傳輸往往會(huì)采用主/從類型的通信形式。這意味著所述的終端要主動(dòng)執(zhí)行向嵌入式平臺(tái)的傳輸函數(shù)。為了進(jìn)行通信,該函數(shù)向所述平臺(tái)發(fā)送一條通信指令,并伴隨有發(fā)送參數(shù)。然后,該指令可以在平臺(tái)中啟動(dòng)一個(gè)或多個(gè)處理操作,并接收來(lái)自平臺(tái)的響應(yīng)參數(shù)。
在根據(jù)標(biāo)準(zhǔn)ISO 7816進(jìn)行工作的智能卡的例子中,該指令的參數(shù)以APDU(應(yīng)用程序協(xié)議數(shù)據(jù)單元)類型的格式被發(fā)送,其中包括如下組織的數(shù)據(jù)序列與指令一同發(fā)送的發(fā)送參數(shù)
CLA一個(gè)字節(jié),指定接收方類型或應(yīng)用程序。
INS一個(gè)字節(jié),指定要執(zhí)行的指令。
P1,P2兩個(gè)字節(jié),提供與APDU指令相關(guān)的信息。
Lc發(fā)送數(shù)據(jù)的長(zhǎng)度。
Data被發(fā)送的數(shù)據(jù)。
Le等待的返回?cái)?shù)據(jù)長(zhǎng)度。
卡返回的響應(yīng)參數(shù)
Data響應(yīng)數(shù)據(jù)。
SW1,SW2兩個(gè)字節(jié),構(gòu)成由卡發(fā)送的檢驗(yàn)消息或代碼。
可見(jiàn),這種APDU格式不提供除線性數(shù)據(jù)序列以外任何其他形式的數(shù)據(jù)的發(fā)送與接收,所述的線性數(shù)據(jù)序列即一個(gè)簡(jiǎn)單的字節(jié)串。如果一個(gè)應(yīng)用程序是用一種語(yǔ)言編寫的,或是用于不帶有APDU通信指令以外任何其他指令的嵌入式平臺(tái),希望傳輸更充分結(jié)構(gòu)化的對(duì)象的程序員就沒(méi)有可用于該目的的簡(jiǎn)單軟件工具。該程序員就不得不在該應(yīng)用程序中提供將該類結(jié)構(gòu)化對(duì)象轉(zhuǎn)換成一個(gè)字節(jié)串的功能,然后利用APDU指令發(fā)送該字節(jié)串,并最終按相反方向重轉(zhuǎn)換所述的對(duì)象。這對(duì)應(yīng)于所述對(duì)象的手工串行化、發(fā)送以及反串行化,換句話說(shuō),就是以最小的細(xì)節(jié)編寫這些操作。
在程序員使用Java語(yǔ)言開(kāi)發(fā)用于JavaCard標(biāo)準(zhǔn)嵌入式平臺(tái)的應(yīng)用程序的例子中,JavaCard中的可用工具提供了APDU格式的線性數(shù)據(jù)發(fā)送,它利用了下列JavaCard指令-“process(APDU)”所述的卡接收APDU格式的數(shù)據(jù),并開(kāi)始處理其中包含的發(fā)送參數(shù),該處理由這些數(shù)據(jù)中指定的接收方軟件主體或“小程序”完成;-“sendAPDU()”或“APDU.sendbytes()”在先前啟動(dòng)的處理之前或之中,所述的卡按APDU格式將其他數(shù)據(jù)以及返回參數(shù)發(fā)回給主機(jī)。
所述的“sendAPDU()”指令被實(shí)現(xiàn)在JavaCard環(huán)境里的“IOApplet”類中,其實(shí)現(xiàn)形式為可應(yīng)用于含有原始數(shù)據(jù)的無(wú)類型對(duì)象的方法。
另一方面,所述的“Process(APDU)”則被聲明在JavaCard環(huán)境里的“IOApplet”類中,其形式為一個(gè)抽象方法。這意味著該方法存在于Javacard環(huán)境中,但是實(shí)現(xiàn)該方法的代碼必須由一個(gè)應(yīng)用程序的程序員編寫,所述的應(yīng)用程序?qū)⒁褂迷撝噶?。例如,程序員在應(yīng)用程序中創(chuàng)建“IOApplet”類的一個(gè)繼承子類,該子類中就包含了一種方法,該方法中容納了該“Process(APDU)”方法所要執(zhí)行的處理的代碼。當(dāng)接收到一條消息時(shí),所述的JavaCard環(huán)境只是調(diào)用“Process(APDU)”方法,然后啟動(dòng)程序員編寫在附加代碼中的處理程序。
為了在該環(huán)境中為程序員提供用于直接發(fā)送結(jié)構(gòu)化軟件對(duì)象的工具,符合本發(fā)明的程序提供了類似的指令,但是這些指令直接接受符合Java語(yǔ)言的特定面向?qū)ο筇匦缘慕Y(jié)構(gòu)化軟件對(duì)象。這些指令可以被用在JavaCard環(huán)境中,并且可以是例如“process(Object)”和“sendObject()”類型的。
為了讓程序員-此處也稱為用戶-能夠直接使用這些指令而不必關(guān)心APDU指令語(yǔ)法,符合本發(fā)明的程序接管了應(yīng)用程序或發(fā)送方主體與接收方主體之間對(duì)象及數(shù)據(jù)的串行化、發(fā)送以及反串行化操作。
在JavaCard環(huán)境的例子中,這些操作可以通過(guò)例如執(zhí)行一段包含在“Process(APDU)”方法中的程序代碼來(lái)實(shí)現(xiàn),該方法屬于“IOApplet”類的一個(gè)子類,例如稱為“ObjectIOApplet”。然后,在接收到一條APDU消息時(shí),該代碼由所述的環(huán)境自動(dòng)啟動(dòng),該消息本身含有轉(zhuǎn)換操作以及對(duì)另一個(gè)“Process(Object)”抽象方法的調(diào)用。使用本發(fā)明該類型的版本,程序員只需編寫要由所述的卡在接收到結(jié)構(gòu)化對(duì)象時(shí)執(zhí)行的操作的代碼。該程序員可以在“ObjectIOApplet”類的繼承子類中編寫該代碼,以便實(shí)現(xiàn)“Process(Object)”抽象方法。
在以下段落中,只對(duì)在所述卡一端執(zhí)行的轉(zhuǎn)換、串行化及反串行化操作進(jìn)行說(shuō)明。顯而易見(jiàn),所述的程序也可以被用來(lái)在主機(jī)端執(zhí)行同樣的操作。所述主機(jī)終端的硬件與軟件資源通常遠(yuǎn)優(yōu)于所述的卡上可用的資源,然而,這些操作在主機(jī)上也可以被編寫或組織得不同,這樣做不偏離本發(fā)明的基本主旨。
在圖1所示的本發(fā)明版本中,一臺(tái)主機(jī)終端(1)與一個(gè)嵌入式平臺(tái)通信,該嵌入式平臺(tái)可以是例如一個(gè)JavaCard標(biāo)準(zhǔn)的智能卡(2)。主機(jī)(1)執(zhí)行至少一個(gè)應(yīng)用程序(11),其中包括至少一個(gè)軟件主體(111),并利用APDU格式的通信函數(shù)(101)與卡(2)通信,該函數(shù)與通信資源密切聯(lián)系,其中包括例如連接單元(100)。該連接單元包含一種連接方法,例如通過(guò)電接觸、微波鏈路、IR鏈路或磁跡,或是這幾類方法中的兩種或更多的組合。
卡(2)執(zhí)行一個(gè)應(yīng)用程序(22),并利用響應(yīng)函數(shù)(201)與主機(jī)(1)進(jìn)行通信,所述的應(yīng)用程序包括至少一個(gè)軟件主體(221),而所述的響應(yīng)函數(shù)是JavaCard系統(tǒng)環(huán)境組成部分。為了這一目的,所述的響應(yīng)函數(shù)(201)要使用一種與主機(jī)終端(1)的通信資源(100)相兼容類型的通信資源(200)。
當(dāng)主機(jī)應(yīng)用程序(11)的主體(111)希望向卡主體(221)發(fā)送數(shù)據(jù),以便指示其執(zhí)行一個(gè)進(jìn)程(2210)或請(qǐng)求位于卡存儲(chǔ)器上的信息時(shí),它就會(huì)執(zhí)行一條對(duì)象寫指令,從而啟動(dòng)用來(lái)向所述的卡發(fā)送結(jié)構(gòu)化軟件對(duì)象(31)的程序,該指令被命名為例如“WriteObject()”。然后,所述的軟件對(duì)象(31)就被串行化,即被主機(jī)轉(zhuǎn)換主體(12)轉(zhuǎn)換成一個(gè)APDU格式的數(shù)據(jù)集。該主機(jī)轉(zhuǎn)換主體接著利用通信函數(shù)(101)通過(guò)主機(jī)連接單元(100)以及卡通信資源(200)將這些數(shù)據(jù)發(fā)送給卡(2)。
當(dāng)所述的數(shù)據(jù)在卡中被所述的響應(yīng)函數(shù)(201)接收到時(shí),該響應(yīng)函數(shù)就會(huì)將所述的數(shù)據(jù)發(fā)送給一個(gè)卡轉(zhuǎn)換主體(21),所述的響應(yīng)函數(shù)管理所述的通信資源(200)。所述的卡轉(zhuǎn)換主體(21)反串行化數(shù)據(jù),以相反的方向轉(zhuǎn)換它們以便重新獲得它們的原始結(jié)構(gòu),該結(jié)構(gòu)是軟件對(duì)象(34)形式的。接著,利用一條對(duì)象處理指令將所述的結(jié)構(gòu)化軟件對(duì)象(34)發(fā)送給接收方主體(22),所述的指令會(huì)執(zhí)行對(duì)應(yīng)于接收數(shù)據(jù)的處理程序(2210),該指令被命名為例如“Process(Object)”。
當(dāng)卡內(nèi)(2)應(yīng)用程序(22)的主體(221)希望向主機(jī)(1)的主體(111)發(fā)送數(shù)據(jù)時(shí),它就會(huì)執(zhí)行一條對(duì)象發(fā)送指令,該指令會(huì)啟動(dòng)用于向主機(jī)發(fā)送結(jié)構(gòu)化軟件對(duì)象(41)的程序,該指令被命名為例如“SendObject()”。所述的軟件對(duì)象(41)接著就被串行化,即被例如卡轉(zhuǎn)換主體(21)轉(zhuǎn)換成一個(gè)APDU格式的數(shù)據(jù)集。然后,該卡轉(zhuǎn)換主體利用響應(yīng)函數(shù)(201)、通過(guò)卡通信資源(200)以及主機(jī)通信單元(100)將這些數(shù)據(jù)發(fā)送給主機(jī)(1)。
當(dāng)所述的數(shù)據(jù)被主機(jī)通信函數(shù)(101)接收到時(shí),所述的通信函數(shù)就會(huì)將這些數(shù)據(jù)發(fā)送給主機(jī)轉(zhuǎn)換主體(12),該通信函數(shù)管理連接單元(100)。所述的主機(jī)轉(zhuǎn)換主體(12)反串行化數(shù)據(jù),按相反的方向轉(zhuǎn)換它們以便重新得到它們的原始結(jié)構(gòu),該結(jié)構(gòu)是軟件對(duì)象(44)形式的。然后,由一條讀取接收數(shù)據(jù)的對(duì)象讀取指令將所述的結(jié)構(gòu)化軟件對(duì)象(44)發(fā)送給接收方主體(11),該指令被命名為例如“ReadObject()”。
圖2示出了本發(fā)明的一個(gè)版本,其中,由主機(jī)和卡轉(zhuǎn)換主體(分別為12和21)執(zhí)行的串行化/反串行化以及發(fā)送操作,是由兩個(gè)不同的主體完成的(分別為121,122和211,212)。
因此,所述的卡轉(zhuǎn)換主體(21)包括一個(gè)通信主體(211)和一個(gè)串行化主體(212)。通信主體(211)管理字節(jié)轉(zhuǎn)換操作,并利用響應(yīng)函數(shù)(201)以發(fā)送參數(shù)(32)和響應(yīng)參數(shù)(43)的形式交換數(shù)據(jù)。對(duì)于數(shù)據(jù)接收而言,所述的通信主體(211)檢驗(yàn)接收數(shù)據(jù)是否完整,并將發(fā)送參數(shù)(32)連接成一個(gè)線性數(shù)據(jù)序列,該數(shù)據(jù)序列被儲(chǔ)存在一個(gè)輸入流(33)中。對(duì)于數(shù)據(jù)發(fā)送而言,所述的通信主體(211)讀取輸出流(42)中的一個(gè)線性數(shù)據(jù)序列,并拆分這些數(shù)據(jù),以便將它們分散成與所述響應(yīng)函數(shù)(201)的發(fā)送能力相容的響應(yīng)參數(shù)(43)。
所述的串行化主體(212)管理對(duì)象級(jí)的轉(zhuǎn)換操作,并執(zhí)行適當(dāng)?shù)拇谢?反串行化。對(duì)于數(shù)據(jù)發(fā)送以及后續(xù)的串行化而言,所述的串行化主體(212)分析待發(fā)送的結(jié)構(gòu)化軟件對(duì)象(41)的結(jié)構(gòu)與內(nèi)容,并將該對(duì)象編碼成線性數(shù)據(jù)序列的形式,該數(shù)據(jù)序列被儲(chǔ)存在輸出流(42)中。對(duì)于數(shù)據(jù)接收以及后續(xù)的反串行化而言,所述的串行化主體(212)讀取輸入流(33)中的線性數(shù)據(jù)序列。然后,它分析該流中的數(shù)據(jù),并重建它們所代表的結(jié)構(gòu)化軟件對(duì)象(34)。
圖3示出了本發(fā)明的一個(gè)版本,其中所述的卡可以擁有多個(gè)主體(221,222,223,231),這些主體可以具有對(duì)應(yīng)于符合本發(fā)明的程序的接收方身份,并且可能被分散在一個(gè)或多個(gè)應(yīng)用程序(22,23)之間。為了能夠處理卡(2)與主機(jī)(1)之間的所有數(shù)據(jù)交換,符合本發(fā)明的程序中包括一個(gè)接口主體(210),卡(2)與主機(jī)(1)之間的所有結(jié)構(gòu)化數(shù)據(jù)交換都要通過(guò)該接口主體發(fā)送。
在本發(fā)明的該版本中,不管所述的接收方是誰(shuí),都要由接口主體(210)替代應(yīng)用程序(22)或接收方主體(221)來(lái)接收所有發(fā)送給卡的數(shù)據(jù)。然后,所述的接口主體(210)指示由所述的通信主體(211)進(jìn)行發(fā)送參數(shù)(32)的連接,以及由所述的串行化主體(212)進(jìn)行結(jié)果數(shù)據(jù)(33)的后續(xù)反串行化,這與上文所述的一樣。一旦這些數(shù)據(jù)被重建為一個(gè)結(jié)構(gòu)化的軟件對(duì)象(34),同一個(gè)接口主體(210)就會(huì)把所述的結(jié)構(gòu)化對(duì)象(34)發(fā)送給軟件主體(221),該軟件主體是被接收到的數(shù)據(jù)(32)的接收方。在另一個(gè)版本中(未示出),接口主體(210)接收到的數(shù)據(jù)(32)中含有對(duì)應(yīng)于接收方主體(221)的識(shí)別信息,或是由接口主體(210)在所述的數(shù)據(jù)(32)被發(fā)送之前向其中加入相應(yīng)的信息。反串行化得到的結(jié)構(gòu)化對(duì)象(34)接著就被反串行化主體(212)或一個(gè)分配主體(未示出)直接送出。
同樣,接口主體(210)也要接收由一個(gè)發(fā)送方應(yīng)用程序(22)或一個(gè)發(fā)送方主體(221)發(fā)送給主機(jī)的所有數(shù)據(jù)。然后,所述的接口主體(210)指示由串行化主體(212)串行化這些數(shù)據(jù),并由通信主體(211)將所述的輸出流(42)連接起來(lái),這與上文所述的一樣。得到的數(shù)據(jù)接著由響應(yīng)函數(shù)(201)通過(guò)通信資源(200,100)以響應(yīng)參數(shù)(43)的形式發(fā)送給終端(1)。
在本發(fā)明的另一個(gè)版本中(未示出),接口主體(210)被插入到發(fā)送及轉(zhuǎn)換鏈中(201,211,212,221)。對(duì)于卡內(nèi)接收(主機(jī)寫指令)而言,接口主體(210)根據(jù)接收數(shù)據(jù)中所包含的信息將接收到的數(shù)據(jù)或?qū)ο髮?dǎo)向它們的接收方(221,222,223,231)。對(duì)于從卡發(fā)送(主機(jī)讀指令)而言,接口主體(210)也可以被包括以接收待發(fā)送的數(shù)據(jù)或?qū)ο?,并向所述的?shù)據(jù)或?qū)ο蠓峙浯硭鼈兊陌l(fā)送方(221,222,223,231)的信息。
可以認(rèn)為,主機(jī)(1)-不論是終端本身還是能夠管理該終端的任意軟件主體,與卡上的一個(gè)主體或應(yīng)用程序之間的信息交換,是在兩個(gè)不同的層次上執(zhí)行的,即字節(jié)層次和對(duì)象層次。
在對(duì)象層次上,組織成結(jié)構(gòu)化軟件對(duì)象的待發(fā)送數(shù)據(jù)被轉(zhuǎn)換成一個(gè)線性數(shù)據(jù)流,反之亦然。該串行化步驟對(duì)對(duì)象的結(jié)構(gòu)進(jìn)行操作,它是由各個(gè)平臺(tái)中的串行化主體執(zhí)行的。
在字節(jié)或字節(jié)串層次上,組織成簡(jiǎn)單線性流的數(shù)據(jù)被利用發(fā)送函數(shù)分段發(fā)送,例如按APDU格式,這是卡與外界交換信息的唯一手段。這些交換由主機(jī)以及卡通信主體控制,兩者通過(guò)利用該通信函數(shù)來(lái)發(fā)送參數(shù)與彼此通信。
為了向用戶提供可見(jiàn)的指令,各種處理程序被實(shí)現(xiàn)在一個(gè)或多個(gè)類中,并且通常有至少一個(gè)在卡中工作,一個(gè)在終端或主機(jī)中工作。在Java語(yǔ)言中,符合本發(fā)明的程序還可以為卡提供一個(gè)“ObjectIOApplet”類,并為主機(jī)提供一個(gè)“ObjectIOProxy”類,該程序利用了以下的語(yǔ)法class ObjectIOProxy{voidwriteObject(Object o);ObjectreadObject();}該“ObjectIOProxy”類定義了一個(gè)主機(jī)中的類,以便向用戶應(yīng)用程序提供“writeObject(Object)”和“readObject()”指令class ObjectIOApplet{void process(Object o);void sendObject(Object o);}該“ObjectIOApplet”類定義了一個(gè)卡中的類,以便向用戶應(yīng)用程序提供“process(Object)”和“sendObject()”指令。
由于卡在本質(zhì)上是被動(dòng)的,因此所有這些轉(zhuǎn)換和發(fā)送操作都由主機(jī)主動(dòng)發(fā)起,而主機(jī)是利用代碼中一條觸發(fā)APDU指令發(fā)送的指令來(lái)實(shí)現(xiàn)的。正是這條指令啟動(dòng)了相關(guān)主體請(qǐng)求的轉(zhuǎn)換操作。
因此,當(dāng)在卡應(yīng)用程序代碼中執(zhí)行時(shí),“process(Object)”和“sendObjectO”指令不會(huì)直接觸發(fā)相應(yīng)的轉(zhuǎn)換操作?!皊endObjectO”指令將待發(fā)送對(duì)象儲(chǔ)存在一個(gè)數(shù)據(jù)隊(duì)列中,例如“qout”,在該隊(duì)列中,要被串行化以便發(fā)送的對(duì)象由一條“qout.push(object)”類型的引入指令導(dǎo)入。當(dāng)一個(gè)串行化操作被啟動(dòng)時(shí),這些待發(fā)送的對(duì)象就從所述的輸出隊(duì)列中被提取出來(lái),提取的順序與它們被導(dǎo)入的順序相同。
同樣,所述的指令還可以從一個(gè)輸入隊(duì)列-例如“qin”-提取一個(gè)對(duì)象,該對(duì)象已經(jīng)被主機(jī)先前啟動(dòng)的操作串行化了。所述的提取由一條“qin.pop()”類型的提取指令實(shí)現(xiàn)。
讀、寫、串行化與反串行化操作由“ObjectIOProxy”類從主機(jī)控制,利用了用戶可見(jiàn)的指令。這些指令可以被實(shí)現(xiàn)在該類的代碼中,例如以下列形式實(shí)現(xiàn)-“card.Serialize out”在卡中開(kāi)始待發(fā)送對(duì)象的串行化,如下所述。這些對(duì)象可以在執(zhí)行“sendObject()”指令時(shí)被卡應(yīng)用程序存儲(chǔ)在一個(gè)輸出隊(duì)列中;-“card.Read”在卡中開(kāi)始輸出流數(shù)據(jù)的讀取,并將這些數(shù)據(jù)發(fā)送給主機(jī),如下所述;-“card.Write”開(kāi)始向卡發(fā)送數(shù)據(jù),并向輸入流中寫入數(shù)據(jù),如下所述;-“card.Serialize In”在卡中開(kāi)始對(duì)輸入流中的對(duì)象反串行化,如下所述。
在此處所述的本發(fā)明版本中,卡輸出及輸入流被儲(chǔ)存在同一個(gè)循環(huán)存儲(chǔ)結(jié)構(gòu)中。本發(fā)明的其他版本也同樣可行,其中為各個(gè)流使用不同的存儲(chǔ)結(jié)構(gòu),或是利用其他類型的存儲(chǔ)結(jié)構(gòu)。
在該例中,循環(huán)存儲(chǔ)結(jié)構(gòu)相當(dāng)于一組連續(xù)的存儲(chǔ)位置,其中的第一個(gè)位置被系統(tǒng)認(rèn)為是緊接著最后一個(gè)位置的。這意味著一個(gè)線性數(shù)據(jù)序列可以從任意位置開(kāi)始存儲(chǔ)在該結(jié)構(gòu)中,而又不會(huì)失去連續(xù)性,這樣做的前提是所述序列的長(zhǎng)度不大于存儲(chǔ)位置的總數(shù)。
輸入與輸出流共享同一個(gè)循環(huán)結(jié)構(gòu)這一事實(shí),涉及將兩個(gè)流中所包含的數(shù)據(jù)存儲(chǔ)到這同一個(gè)循環(huán)結(jié)構(gòu)的不同區(qū)域內(nèi)。這些流中所包含的數(shù)據(jù)在被讀取后就會(huì)被刪除,刪除是立即進(jìn)行的,也可以是在某項(xiàng)操作期間進(jìn)行的,兩個(gè)流的長(zhǎng)度與位置在該循環(huán)結(jié)構(gòu)中可變。當(dāng)兩個(gè)流之一沒(méi)有足夠的空間來(lái)儲(chǔ)存新數(shù)據(jù)時(shí)(這是由于新數(shù)據(jù)受到了另一個(gè)流的未刪除數(shù)據(jù)的阻礙),就必須處理所述的另一個(gè)流,以釋放它占用的空間。
該類循環(huán)結(jié)構(gòu)使得利用有限的存儲(chǔ)資源來(lái)處理沒(méi)有預(yù)先確定長(zhǎng)度的流成為可能。只要把對(duì)兩個(gè)流進(jìn)行的不同操作充分均勻的交替進(jìn)行,就可以實(shí)現(xiàn)這個(gè)目的。
在字節(jié)層次,從一個(gè)平臺(tái)的輸出流到另一個(gè)平臺(tái)的輸入流的數(shù)據(jù)交換以及反向的情形是像下文所述的那樣進(jìn)行的。
如果主機(jī)希望獲得位于卡輸出流中的數(shù)據(jù),它就發(fā)送一條讀取指令,例如符合Java語(yǔ)法的“card.Read”。該指令啟動(dòng)一次讀取會(huì)話,該會(huì)話通常會(huì)被分為多項(xiàng)事務(wù),每項(xiàng)事務(wù)代表進(jìn)程的一次重復(fù)(iteration)。
為了啟動(dòng)所述的讀取會(huì)話,主機(jī)會(huì)通過(guò)它的通信主體與發(fā)送函數(shù)發(fā)出一條APDU格式的指令,并伴有代表其希望接收的數(shù)據(jù)長(zhǎng)度的發(fā)送參數(shù)(P1和P2,對(duì)應(yīng)于短整數(shù))。從通信主體接收到該條指令后,卡就會(huì)讀取卡輸出流中的第一數(shù)據(jù)塊,并將該塊發(fā)送給卡響應(yīng)函數(shù)。然后,該第一數(shù)據(jù)塊被作為響應(yīng)數(shù)據(jù)(DataR)返回給主機(jī),以此對(duì)所述的APDU指令作出響應(yīng)。
因此,所述讀取進(jìn)程的各次連續(xù)重復(fù)涉及由主機(jī)發(fā)送APDU指令,該指令伴隨有代表已經(jīng)接收到的數(shù)據(jù)長(zhǎng)度的發(fā)送參數(shù)(P1和P2,即一個(gè)短整數(shù))。一旦被卡通信主體接收到,該長(zhǎng)度就起到了確認(rèn)先前的發(fā)送的作用。由此,所述的通信主體就會(huì)返回緊接著主機(jī)所指示的長(zhǎng)度之后的輸出流數(shù)據(jù),以此作為響應(yīng)數(shù)據(jù)(DataR)。應(yīng)該注意的是,數(shù)據(jù)從輸出流中被讀出但是未被刪除,從而可以在有需要的時(shí)候重新被發(fā)送。這意味著在這種發(fā)送過(guò)程中不會(huì)有數(shù)據(jù)被遺漏。
當(dāng)主機(jī)所請(qǐng)求的數(shù)據(jù)長(zhǎng)度被正確接收后,讀取會(huì)話終止,主機(jī)也停止循環(huán)。如果卡通信主體發(fā)送了一個(gè)數(shù)據(jù)項(xiàng)(例如一個(gè)長(zhǎng)度為零的DataR域)或是一個(gè)表示輸出流中的所有可用數(shù)據(jù)都已經(jīng)被發(fā)出的代碼(SW1或SW2),所述的讀取會(huì)話也可以被中止或中斷。如果卡輸出流為空,主機(jī)就必須在卡中啟動(dòng)一次新的從卡“qout”隊(duì)列到卡輸出流的對(duì)象串行化操作,以便讓輸出流接收新數(shù)據(jù)。
當(dāng)主機(jī)希望從它的輸出流向卡發(fā)送數(shù)據(jù)時(shí),它就會(huì)發(fā)出一條寫指令,例如符合Java語(yǔ)法的“card.Write”。該指令啟動(dòng)一次寫入會(huì)話,該會(huì)話通常會(huì)被分為多項(xiàng)事務(wù),每項(xiàng)事務(wù)代表進(jìn)程的一次重復(fù)。
為了啟動(dòng)所述的寫入會(huì)話,主機(jī)通過(guò)它的通信主體和發(fā)送函數(shù)發(fā)出一條APDU格式的指令,該指令伴有代表了它希望發(fā)送的數(shù)據(jù)長(zhǎng)度的發(fā)送參數(shù)(P1和P2,即一個(gè)短整數(shù))。這第一條APDU指令的數(shù)據(jù)域(DataT)中含有待發(fā)送的第一數(shù)據(jù)塊或組,該數(shù)據(jù)塊是從主機(jī)輸出流讀取的。在接收到這條指令后,卡響應(yīng)函數(shù)就將所述的第一數(shù)據(jù)塊發(fā)送給卡通信主體。然后,該卡通信主體將該第一數(shù)據(jù)塊寫入卡輸入流。
所述寫入進(jìn)程的每次連續(xù)重復(fù)都涉及由主機(jī)發(fā)送APDU指令,該指令伴有代表了已經(jīng)發(fā)出的數(shù)據(jù)長(zhǎng)度的發(fā)送參數(shù)(P1和P2,即一個(gè)短整數(shù))。該第一APDU指令的數(shù)據(jù)域(DataT)中含有從主機(jī)輸出流讀取的下一個(gè)數(shù)據(jù)塊或組。在接收到該指令時(shí),卡響應(yīng)函數(shù)就將這些參數(shù)以及該數(shù)據(jù)塊發(fā)送給卡通信主體。然后,該卡通信主體將發(fā)送參數(shù)(P1和P2)中聲明的數(shù)據(jù)長(zhǎng)度與寫入會(huì)話開(kāi)始以來(lái)已經(jīng)接收到的數(shù)據(jù)長(zhǎng)度進(jìn)行比較。這意味著在該發(fā)送過(guò)程中不會(huì)有數(shù)據(jù)被遺漏。
如果該比較過(guò)程沒(méi)有發(fā)現(xiàn)錯(cuò)誤,那么所述的卡通信主體就會(huì)將該數(shù)據(jù)塊寫入卡輸入流。如果檢測(cè)到錯(cuò)誤,所述的通信主體則會(huì)向主機(jī)返回一個(gè)代碼或標(biāo)記,該代碼指示了一項(xiàng)錯(cuò)誤并且/或者代表了該錯(cuò)誤的特性。該代碼或標(biāo)記可以通過(guò)響應(yīng)函數(shù)的響應(yīng)參數(shù)(SW1和SW2)、返回的數(shù)據(jù)域(DataR)、該域的長(zhǎng)度或是這些元素的組合形式被返回。
當(dāng)主機(jī)聲明的長(zhǎng)度被發(fā)送完畢,所述的寫入會(huì)話就會(huì)終止,主機(jī)也會(huì)停止循環(huán)。如果卡通信主體發(fā)出一個(gè)代碼或標(biāo)記以表明卡輸入流不能接收任何新數(shù)據(jù),所述的會(huì)話也會(huì)被中止或中斷。這時(shí),所述的主機(jī)就必須在卡中啟動(dòng)一個(gè)或多個(gè)操作,以便釋放包含該輸入流的存儲(chǔ)結(jié)構(gòu)中的空間。
這可能涉及在卡內(nèi)啟動(dòng)一次新的從輸入流到“qin”對(duì)象輸入隊(duì)列的數(shù)據(jù)反串行化操作,所述的輸入隊(duì)列可以被卡應(yīng)用程序訪問(wèn)。這也可能涉及啟動(dòng)一次新的讀取會(huì)話,以接收包含在卡輸出流中的數(shù)據(jù),從而釋放存儲(chǔ)這兩個(gè)流的循環(huán)結(jié)構(gòu)中的空間。
在對(duì)象層次上,串行化與反串行化操作是在數(shù)據(jù)流與卡主體或卡應(yīng)用程序之間進(jìn)行的,反之亦然,如下所述。
對(duì)象在卡中從輸入流(33)被反串行化至“qin”輸入隊(duì)列,在該隊(duì)列中,對(duì)象可以被“Process(Object)”指令直接訪問(wèn),該指令由“ObjectIOApplet”類提供,并由接收方主體或應(yīng)用程序使用。
為了實(shí)現(xiàn)符合本發(fā)明的程序,當(dāng)主機(jī)希望在卡內(nèi)啟動(dòng)一次反串行化操作時(shí),它就會(huì)使用一條指令,例如符合Java語(yǔ)法的“card.SerializeIn”。
圖4示出了一個(gè)結(jié)構(gòu)化軟件對(duì)象(34)的反串行化,該操作是通過(guò)解碼對(duì)應(yīng)于所述對(duì)象的輸入流(32)數(shù)據(jù)實(shí)現(xiàn)的,還示出了所述結(jié)構(gòu)化對(duì)象(34)或結(jié)果對(duì)象的存儲(chǔ)及結(jié)構(gòu)成分創(chuàng)建操作。
串行化主體(212)一個(gè)接一個(gè)地讀取儲(chǔ)存在輸入流(33)內(nèi)一個(gè)線性序列中的數(shù)據(jù),根據(jù)一個(gè)給定的代碼譯碼這些數(shù)據(jù),并根據(jù)該譯碼結(jié)果創(chuàng)建一個(gè)結(jié)構(gòu)化軟件對(duì)象(34)。儲(chǔ)存在該輸入流中的數(shù)據(jù)序列中的某些數(shù)據(jù)可能具有一個(gè)指定值,并且該值被看作是表示一個(gè)代碼標(biāo)簽的存在。該解碼可以通過(guò)調(diào)用一種分配方法來(lái)實(shí)現(xiàn),該分配方法是各類待解碼的結(jié)構(gòu)化對(duì)象所特有的,例如利用下列語(yǔ)法Typeobject∷decode(Object,InputStream)來(lái)解碼一個(gè)“Typeobject”類型的對(duì)象“Object”,該對(duì)象來(lái)自輸入流“Input Stream”。
該代碼包括一組標(biāo)簽,每個(gè)標(biāo)簽都有指定的用途,并且每個(gè)標(biāo)簽都對(duì)應(yīng)于輸入流中一個(gè)數(shù)據(jù)項(xiàng)的至少一個(gè)特定值。從而,輸入流中具有對(duì)應(yīng)于這些標(biāo)簽之一的值的每個(gè)數(shù)據(jù)項(xiàng)都會(huì)在反串行化過(guò)程中被串行化主體譯碼出來(lái)。
對(duì)于使用符合本發(fā)明的程序的應(yīng)用程序來(lái)說(shuō),串行化主體(212)可以被設(shè)計(jì)來(lái)識(shí)別多個(gè)標(biāo)簽組,或者每個(gè)標(biāo)簽可以由多個(gè)不同的數(shù)據(jù)值表示,這樣做不會(huì)偏離本發(fā)明的基本主旨。該類多樣性尤其可被用來(lái)解決一個(gè)卡(2)或卡類型對(duì)應(yīng)多個(gè)不同終端或主機(jī)環(huán)境的情況。
對(duì)于此處所述的本發(fā)明版本,所述的代碼包括“NULL”、“NEW”、“REF”和“DATA”類型的標(biāo)簽。
-一個(gè)NULL標(biāo)簽代表不存在數(shù)據(jù),但是在串行化主體進(jìn)行創(chuàng)建的過(guò)程中要在結(jié)構(gòu)中占據(jù)一個(gè)位置。
-一個(gè)NEW標(biāo)簽向串行化主體表示一個(gè)新對(duì)象說(shuō)明的開(kāi)始,該對(duì)象是所述轉(zhuǎn)換過(guò)程得到的結(jié)構(gòu)化軟件對(duì)象(34),或是一個(gè)包括該類結(jié)構(gòu)化對(duì)象(34)一部分的對(duì)象,它被稱為元素。
-一個(gè)REF標(biāo)簽表示將一個(gè)對(duì)象(同一個(gè)或另一個(gè)對(duì)象)指定為說(shuō)明中所有或部分對(duì)象或元素的值的源。該標(biāo)簽被用來(lái)通過(guò)引用指定一個(gè)值。
-一個(gè)DATA標(biāo)簽表示以下的數(shù)據(jù)代表說(shuō)明中的對(duì)象或元素的值或內(nèi)容。該內(nèi)容可以由原始數(shù)據(jù)構(gòu)成,該原始數(shù)據(jù)代表被直接指定給對(duì)象的一個(gè)或多個(gè)值,也可以包括其他標(biāo)簽,該標(biāo)簽表示定義該內(nèi)容的對(duì)象或引用。
根據(jù)標(biāo)簽的類型,一個(gè)標(biāo)簽之后可以接一個(gè)或多個(gè)數(shù)據(jù)項(xiàng),這些數(shù)據(jù)項(xiàng)的譯碼是根據(jù)相關(guān)標(biāo)簽的含義來(lái)確定的。
-當(dāng)讀到一個(gè)NEW標(biāo)簽時(shí),串行化主體知道它必須將接下來(lái)的數(shù)據(jù)項(xiàng)譯碼成代表新對(duì)象的類型。
-同樣,當(dāng)讀到一個(gè)REF標(biāo)簽時(shí),串行化主體知道它必須將接下來(lái)的數(shù)據(jù)項(xiàng)譯碼成代表一個(gè)對(duì)象的標(biāo)識(shí)符,該對(duì)象通過(guò)引用被指定為該值的源。
在此處所述的本發(fā)明版本中,所述的標(biāo)簽被編碼在一個(gè)字節(jié)中,編碼方式與類型及引用標(biāo)識(shí)符相同,但是很明顯,符合本發(fā)明的程序還要提供其他代碼的使用,根據(jù)相關(guān)計(jì)算機(jī)環(huán)境的需求及可行性,這些代碼會(huì)有所不同,或更復(fù)雜,或更明確。
當(dāng)讀到輸入流(32)的數(shù)據(jù)時(shí),串行化主體(212)會(huì)分析每個(gè)數(shù)據(jù)項(xiàng)的值,并創(chuàng)建及載入對(duì)象或元素(340,341,342,343,344),這些對(duì)象構(gòu)成了結(jié)果對(duì)象(34)。對(duì)輸入流(32)的這種讀取重復(fù)進(jìn)行,直到該輸入流所代表的對(duì)象(34)的重建被完成為止。該創(chuàng)建可以通過(guò)調(diào)用一個(gè)分配方法來(lái)實(shí)現(xiàn),該方法是各個(gè)對(duì)象類型所特有的,例如使用下列語(yǔ)法Typeobject∷malloc()在反串行化時(shí)創(chuàng)建或分配一個(gè)“Typeobject”類型的對(duì)象。
該類型的對(duì)象可以具有不同的結(jié)構(gòu),這些創(chuàng)建與載入操作由一個(gè)管理主體(TM0、TM1、TM2)直接或間接地控制,該管理主體是待創(chuàng)建的對(duì)象類型所對(duì)應(yīng)的特定類型,例如Java語(yǔ)言中的“typemarshaller”主體。該類型管理主體特定用于一種或多種對(duì)象類型,并且受到一個(gè)通用類型管理器主體(TMG)的控制,例如Java語(yǔ)言中的“type manager”主體。特別地,該類型管理器主體儲(chǔ)存了對(duì)應(yīng)于反串行化期間所創(chuàng)建的各種對(duì)象類型的標(biāo)識(shí)符。該通用類型管理器主體(TMG)還包括代碼與程序或方法,它們特定用于這些不同的對(duì)象類型,并且被用于相同對(duì)象的串行化/反串行化。所述的類型管理器主體還被用來(lái)管理對(duì)象的列表以及它們的分配,從而可以執(zhí)行新的分配并在解碼時(shí)重新利用一塊自由空間來(lái)創(chuàng)建一個(gè)新對(duì)象。
通常,類型管理器主體(TMG)中包含所有不同對(duì)象類型的信息,這些對(duì)象是可以在卡中管理的。該信息可由一個(gè)主機(jī)生成,例如在卡編程階段。然后,以程序代碼(“glue code”)的形式將該信息與應(yīng)用程序所使用的類(“applet”)一同發(fā)送,所述的程序代碼(“gluecode”)會(huì)被添加到通用類型管理器主體(TMG)的代碼中。
利用下文中將要說(shuō)明的類型管理器主體,以及類型marshaller主體,符合本發(fā)明的程序就可以在一個(gè)嵌入式平臺(tái)上管理基本類型或構(gòu)造類型的結(jié)構(gòu)化對(duì)象的串行化與反串行化,所述嵌入式平臺(tái)-例如JavaCard-的編程環(huán)境中不包括這種類型管理器。
一個(gè)對(duì)象或元素在解碼期間的創(chuàng)建對(duì)應(yīng)于該對(duì)象的分配,即保留指定的存儲(chǔ)器空間并將該空間分配給該對(duì)象。某些嵌入式環(huán)境,尤其是包括Javacard在內(nèi),并不提供可被用來(lái)釋放先前被一個(gè)刪除對(duì)象占用的存儲(chǔ)器空間的軟件工具,比如傳統(tǒng)Java語(yǔ)言的“garbagecollector”主體。在串行化主體(212)創(chuàng)建一個(gè)對(duì)象時(shí),符合本發(fā)明的程序提供這樣一種可行性,即在執(zhí)行該創(chuàng)建操作時(shí),將先前被另一個(gè)對(duì)象占用的存儲(chǔ)器空間分配給該對(duì)象,所述的另一個(gè)對(duì)象已成為過(guò)剩的,例如與待創(chuàng)建對(duì)象的類型相同的對(duì)象。由此就可以時(shí)刻重用卡的存儲(chǔ)空間,由于卡存儲(chǔ)空間的有限性,這是非常有價(jià)值的優(yōu)點(diǎn)。
在圖4所示的例子中,輸入流(32)對(duì)應(yīng)于一個(gè)結(jié)構(gòu)化結(jié)果對(duì)象(34),該對(duì)象的結(jié)構(gòu)或圖表可按下列形式用Java語(yǔ)言描述
在讀取輸入流(33)時(shí),串行化主體首先讀取一個(gè)NEW標(biāo)簽(321)。然后它讀取后面的數(shù)據(jù)項(xiàng)(322),并接著儲(chǔ)存對(duì)應(yīng)于類型2對(duì)象的創(chuàng)建請(qǐng)求。根據(jù)該NEW標(biāo)識(shí)符2標(biāo)簽(321),串行化主體利用對(duì)應(yīng)于同樣類型(Type2)的類型管理器主體(TM2)來(lái)創(chuàng)建新的對(duì)象“x”(340),在本例中該對(duì)象屬于類X。在開(kāi)始描述結(jié)果對(duì)象時(shí),該新對(duì)象將是對(duì)應(yīng)于該結(jié)果對(duì)象的圖表的樹(shù)狀結(jié)構(gòu)的“根”對(duì)象。
在進(jìn)行創(chuàng)建時(shí),串行化主體為新創(chuàng)建的對(duì)象(340)指定一個(gè)標(biāo)號(hào)(3402),在本例中該標(biāo)號(hào)取值為0。在創(chuàng)建該結(jié)果對(duì)象時(shí),所述的標(biāo)號(hào)(3402)可以作為其他元素或部分元素的參考,從而可以確定該元素的內(nèi)容是否已經(jīng)被載入。
然后,串行化主體將該對(duì)象的類型與標(biāo)號(hào)儲(chǔ)存在一個(gè)存儲(chǔ)器結(jié)構(gòu)中,該存儲(chǔ)器被稱為類型堆棧(TYST)。該類型堆棧是一種存儲(chǔ)器堆棧類型結(jié)構(gòu),這意味著數(shù)據(jù)項(xiàng)可以被儲(chǔ)存(壓棧)在另一個(gè)數(shù)據(jù)項(xiàng)之上,并且一個(gè)指定的數(shù)據(jù)項(xiàng)只有在它之后存儲(chǔ)的數(shù)據(jù)已經(jīng)被提取之后才能被讀取并提出(出棧)。數(shù)據(jù)從棧中被提取出來(lái)的順序與它們被儲(chǔ)存進(jìn)去的順序相反(LIFO即后入先出)。
所述的串行化主體還將所述新對(duì)象(340)的類型及它的標(biāo)號(hào)與所述對(duì)象對(duì)應(yīng)地儲(chǔ)存起來(lái),該對(duì)象被稱為當(dāng)前對(duì)象(OBJ),所述的類型與標(biāo)號(hào)將和隨后的數(shù)據(jù)一同被載入到輸入流中。
下一個(gè)標(biāo)簽是一個(gè)DATA標(biāo)簽,之后緊接著兩個(gè)原始數(shù)據(jù)項(xiàng)(324,325),這兩個(gè)數(shù)據(jù)項(xiàng)不是標(biāo)簽或標(biāo)識(shí)符。這兩個(gè)數(shù)據(jù)項(xiàng)被儲(chǔ)存在當(dāng)前對(duì)象(OBJ),即x(340)中,作為后續(xù)元素(342,343)的值。這兩個(gè)后續(xù)元素分別是被標(biāo)為“i”的整型(int)和被標(biāo)為“by”的字節(jié)型(byte),這些元素分別取輸入流中這兩個(gè)數(shù)據(jù)項(xiàng)(324、325)所包含的值。
下一個(gè)標(biāo)簽是一個(gè)NEW標(biāo)簽,緊接著該標(biāo)簽的是一個(gè)表示類型0的數(shù)據(jù)項(xiàng)。該序列表示對(duì)象“x”的下一個(gè)元素是一個(gè)類型0的對(duì)象。串行化主體將為所述的對(duì)象(344)分配一個(gè)標(biāo)號(hào)(3442),在該例中該標(biāo)號(hào)為1,并將對(duì)應(yīng)于所述新對(duì)象(344)的標(biāo)號(hào)與類型(即0)添加(壓)到類型堆棧(TYST)中。所述的串行化主體還會(huì)讓對(duì)應(yīng)于類型0的類型管理器主體(TM0)創(chuàng)建一個(gè)類型0的對(duì)象,在本例中該對(duì)象為類型Y的“y”(344)。
通過(guò)對(duì)應(yīng)于當(dāng)前對(duì)象(OBJ)的類型管理器主體(TM2),所述的串行化主體能夠得知當(dāng)前對(duì)象(OBJ),即“x”,還未完全被載入。下一個(gè)標(biāo)簽是一個(gè)DATA標(biāo)簽,之后跟隨著一個(gè)原始數(shù)據(jù)項(xiàng)(329),將被指定為當(dāng)前對(duì)象下一個(gè)元素(341)的值,即布爾類型元素“bo”的值,該元素是對(duì)象“x”的最后一個(gè)元素。
通過(guò)對(duì)應(yīng)于當(dāng)前對(duì)象(OBJ)的類型管理器主體(TM2),所述的串行化主體就能得知所述的當(dāng)前對(duì)象(OBJ),即“x”(340),現(xiàn)已完全被載入。所述載入對(duì)象(340)的標(biāo)號(hào)(3402)被儲(chǔ)存在對(duì)象堆棧中(OBJST),而該對(duì)象(340)的標(biāo)識(shí)符被儲(chǔ)存在卡中。所述的串行化對(duì)象接著終止當(dāng)前對(duì)象的載入,并提取(彈出)保存在類型棧(TYST)頂部的類型與標(biāo)號(hào)。該堆棧的頂部必須被理解為可以被首先訪問(wèn)的堆棧位置。從類型堆棧中提取出來(lái)的類型與標(biāo)號(hào)-在本例中分別為0和1-接著就被儲(chǔ)存成對(duì)應(yīng)于新當(dāng)前對(duì)象(OBJ)。
下一個(gè)標(biāo)簽是一個(gè)DATA標(biāo)簽,該標(biāo)簽表示當(dāng)前對(duì)象,即“y”,的載入。該標(biāo)簽之后緊接著一個(gè)REF標(biāo)簽(3211)和一個(gè)數(shù)據(jù)項(xiàng)(3312),在該例中為0。因此,所述的串行化主體會(huì)通過(guò)引用為對(duì)象“y”(344)指定一個(gè)值,該值代表了與某個(gè)對(duì)象的值的簡(jiǎn)單聯(lián)系,而所述的標(biāo)號(hào)(3402)就是通過(guò)該引用(3212)被分派給該對(duì)象的。對(duì)象“y”就具有了一個(gè)被定義為引用對(duì)象“x”的值,而在反串行化過(guò)程中利用對(duì)象“x”具有標(biāo)號(hào)0。因此,可以通過(guò)將對(duì)應(yīng)于該對(duì)象“x”的標(biāo)識(shí)符儲(chǔ)存在卡中來(lái)定義該聯(lián)系,該標(biāo)識(shí)符是通過(guò)該標(biāo)號(hào)從對(duì)象堆棧(OBJST)中讀取的。
通過(guò)對(duì)應(yīng)于當(dāng)前對(duì)象(OBJ)的類型管理器主體(TM0),所述的串行化主體就能得知所述的當(dāng)前對(duì)象(OBJ)-即“y”-現(xiàn)已完全被載入。所述載入對(duì)象(344)的標(biāo)號(hào)(3442)被儲(chǔ)存在對(duì)象堆棧(OBJST)中,而所述對(duì)象(344)的標(biāo)識(shí)符被存儲(chǔ)在卡中。所述的串行化對(duì)象接著就會(huì)終止該載入程序,并詢問(wèn)類型堆棧(TYST)。
如果類型堆棧(TYST)在對(duì)象“y”的類型被提出之后為空,即沒(méi)有更多的“構(gòu)造類型”要被重建,那么串行化主體就斷定結(jié)果對(duì)象(34)已經(jīng)被完整地創(chuàng)建了。
在本發(fā)明的一個(gè)變形版本中,新對(duì)象的創(chuàng)建或分配可以在反串行化進(jìn)程的任意階段完成,從表示所述新對(duì)象的NEW標(biāo)簽的讀取,直到該對(duì)象載入的開(kāi)始。
在另一種變型中,被用于一個(gè)對(duì)象的反串行化的標(biāo)號(hào)與卡內(nèi)對(duì)象的標(biāo)識(shí)符完全相同。
對(duì)象在卡中從輸出流(42)被串行化到輸出隊(duì)列“qout”,該輸出隊(duì)列可由指令“SendObject()”直接訪問(wèn),該指令由“ObjectIOApplet”類提供,并被接收方主體或應(yīng)用程序使用。
為了實(shí)現(xiàn)符合本發(fā)明的程序,主機(jī)使用一條指令,例如符合Java語(yǔ)法的“card.SerializeOut”,在卡中啟動(dòng)一次串行化操作。
圖5示出了一個(gè)結(jié)構(gòu)化軟件對(duì)象(41)的串行化,該對(duì)象被稱為源對(duì)象,所述的串行化通過(guò)解析所述結(jié)構(gòu)化對(duì)象(41)的結(jié)構(gòu)成分來(lái)實(shí)現(xiàn),隨后以儲(chǔ)存在對(duì)應(yīng)于所述源對(duì)象(41)的輸出流(42)中的數(shù)據(jù)形式進(jìn)行編碼。
該串行化功能被實(shí)現(xiàn)在一個(gè)方法中,即可用于一種指定類型對(duì)象的行為或程序,利用下列Java語(yǔ)法實(shí)現(xiàn)Typeobject∷(Object,OutputStream)這是一個(gè)用來(lái)將類型“Typeobject”的對(duì)象“Object”編碼到輸出流“OutputStream”中的方法。
Typeobject∷getSuper()是一個(gè)用來(lái)在編碼一個(gè)“Typeobject”類型對(duì)象時(shí),獲取與一個(gè)對(duì)象的類型及構(gòu)造類型相關(guān)的信息的方法。
基本類型一般是那些由環(huán)境或編程語(yǔ)言安排或管理的類型,而構(gòu)造類型與之相對(duì),它們被定義為多個(gè)對(duì)象的組合?,F(xiàn)有的基本類型為例如嵌入式環(huán)境中的“整型”、“布爾型”和“字節(jié)型”,而在更全面的環(huán)境中則還包括長(zhǎng)整型、實(shí)型、長(zhǎng)實(shí)型和字符型(“l(fā)ong”、“real”、“double”和“char”)。
對(duì)于該串行化操作而言,所述的串行化主體(212)對(duì)要被串行化的源對(duì)象(42)的整個(gè)結(jié)構(gòu)或圖表執(zhí)行一次循環(huán)掃描,從而分析對(duì)象元素(410,412,413,414,411),該掃描從“根”對(duì)象或元素開(kāi)始,在該例中為“x”。本例中所提供的源對(duì)象(42)的圖表與上述圖4中的一樣。所述的串行化主體為每個(gè)具有構(gòu)造類型的圖表元素調(diào)用對(duì)應(yīng)于同一個(gè)構(gòu)造類型的主體(TM0,TM1,TM2)。
對(duì)輸出流(42)中的源對(duì)象(41)的描述從寫入一個(gè)NEW標(biāo)簽開(kāi)始,隨后是根元素類型標(biāo)識(shí)符,在該例中為類型2的對(duì)象“x”。該根對(duì)象被指定為當(dāng)前對(duì)象(OBJ)。該對(duì)象還接收一個(gè)標(biāo)號(hào),在該例中為0,并且它的類型與標(biāo)號(hào)會(huì)被載入(壓棧操作)到類型堆棧(TYST)中。
通過(guò)寫入一個(gè)DATA標(biāo)簽而繼續(xù)進(jìn)行描述,之后是表示對(duì)應(yīng)于根對(duì)象內(nèi)容的值或引用的數(shù)據(jù)。由于對(duì)象“x”中包含一個(gè)構(gòu)造類型的對(duì)象“y”(414),因此對(duì)根對(duì)象的描述中還包括一個(gè)NEW標(biāo)簽,之后是所述對(duì)象“y”的類型,在本例中為“NEW 0”,該類型取代了所述對(duì)象“y”的值。在NEW標(biāo)簽被寫入時(shí),一個(gè)標(biāo)號(hào)被分配給該標(biāo)簽,在本例中為1。該新對(duì)象的標(biāo)號(hào)及類型接著被載入(壓棧操作)到類型堆棧(TYST)中。
當(dāng)對(duì)象(OBJ)-即對(duì)象“x”(410)-的內(nèi)容描述被完成后,該對(duì)象的標(biāo)號(hào)就與該對(duì)象的標(biāo)識(shí)符一同被儲(chǔ)存到對(duì)象堆棧(OBJST)中。所述的串行化主體接著就解析類型堆棧,提取出(出棧操作)對(duì)象“y”的類型及標(biāo)號(hào)。它將所述的對(duì)象“y”存為一個(gè)新的當(dāng)前對(duì)象(OBJ),并接著開(kāi)始對(duì)所述對(duì)象“y”的內(nèi)容進(jìn)行描述。該對(duì)象包括對(duì)根對(duì)象“x”的簡(jiǎn)單引用,被寫入輸出流的數(shù)據(jù)包括一個(gè)REF標(biāo)簽,隨后是一個(gè)數(shù)據(jù)項(xiàng),該數(shù)據(jù)項(xiàng)起到了要被指定為引用源的對(duì)象的標(biāo)號(hào)的作用,在該例中,被引用的對(duì)象就是標(biāo)號(hào)為0的對(duì)象“x”。
一旦對(duì)當(dāng)前對(duì)象-即對(duì)象“y”(414)-的內(nèi)容描述被完成,它的標(biāo)號(hào)就與該對(duì)象的標(biāo)識(shí)符一起被儲(chǔ)存到對(duì)象堆棧(OBJST)中。所述的串行化主體接著就會(huì)查詢類型堆棧,并提取(出棧操作)出對(duì)象“x”的類型,該類型在該類型堆棧中被儲(chǔ)存在對(duì)象“y”之下。由于對(duì)象“x”的標(biāo)號(hào)已經(jīng)被儲(chǔ)存在對(duì)象堆棧(OBJST)中,因此所述的串行化主體就知道對(duì)象“x”已經(jīng)被串行化或描述了。它會(huì)再次查詢類型堆棧,觀察到它已經(jīng)為空,從而斷定構(gòu)成源對(duì)象(34)的所有元素都已經(jīng)在輸出流(42)中被完全描述了。
由于這些算法的遞歸性,就可以利用一種程序代碼來(lái)執(zhí)行這些串行化與反串行化操作,該代碼占用的存儲(chǔ)器空間足夠小,從而可以將該代碼存儲(chǔ)在一個(gè)嵌入式平臺(tái)中,例如一個(gè)智能卡或JavaCard標(biāo)準(zhǔn)的便攜式計(jì)算機(jī)化對(duì)象。這些算法的簡(jiǎn)潔性還使得用一個(gè)低功率處理器執(zhí)行這些操作成為可能,比如那些使用在這類嵌入式平臺(tái)上的處理器。
為了平衡儲(chǔ)存在臨時(shí)表單中的數(shù)據(jù)容量,主機(jī)應(yīng)用程序(11)所需的各種讀取、寫入、串行化及反串行化操作可以被交織在一個(gè)或多個(gè)程序循環(huán)中。一個(gè)該類循環(huán)在每次重復(fù)時(shí)都執(zhí)行一條對(duì)應(yīng)于這些操作中的每一個(gè)操作的指令,例如使用下列Java語(yǔ)法DoDo card.Serialize out While(ok out)
Do card.Read While(data read)While(data in)card.WriteWhile(ok in)card.Serialize inLoop在該例中,第一行與最后一行(“Do”與“Loop”)決定了一個(gè)循環(huán)的重復(fù),該循環(huán)中包括四行交叉的代碼。一個(gè)該類循環(huán)很容易和其他操作組合在一起,并加入用于中斷循環(huán)進(jìn)程的各種條件。
循環(huán)中的第一行表示在卡中為先前通過(guò)通過(guò)“SendObject()”指令儲(chǔ)存在“qout”輸出隊(duì)列中的對(duì)象啟動(dòng)一次向卡輸出流的串行化會(huì)話。只要“ok out”條件滿足,該會(huì)話就會(huì)被重復(fù),例如,只要“qout”隊(duì)列中有對(duì)象要被發(fā)送并且輸出流未滿。
第二行表示為儲(chǔ)存在卡輸出流中的數(shù)據(jù)啟動(dòng)一次讀取會(huì)話,由主機(jī)進(jìn)行讀取。只要“data read”條件滿足,該會(huì)話就會(huì)被重復(fù),例如只要從卡接收到數(shù)據(jù)。
第三行表示執(zhí)行并重復(fù)從主機(jī)到數(shù)據(jù)輸入流的寫入會(huì)話。只要“data in”條件滿足,該會(huì)話就會(huì)被執(zhí)行并重復(fù),例如只要有數(shù)據(jù)要被發(fā)送給卡并且卡輸入流未滿。
第四行表示為存儲(chǔ)在卡輸入流中的數(shù)據(jù)執(zhí)行并重復(fù)到結(jié)構(gòu)化對(duì)象“qin”輸入隊(duì)列的反串行化會(huì)話,其中這些數(shù)據(jù)由一條“process(Object)”命令提取。只有“ok in”條件滿足時(shí),該會(huì)話才會(huì)被執(zhí)行并重復(fù),例如只要在卡輸入流中有數(shù)據(jù)要被反串行化。
在被動(dòng)的卡的例子中,例如符合JavaCard標(biāo)準(zhǔn)的情況,對(duì)象串行化操作的結(jié)束通常會(huì)啟動(dòng)對(duì)該對(duì)象的處理,例如通過(guò)自動(dòng)調(diào)用“process(Object)”方法。
應(yīng)該注意的是,在本例中只示出了在卡端執(zhí)行的操作。在主機(jī)端執(zhí)行的對(duì)稱操作可以根據(jù)可用的硬件及軟件資源按類似的方式或完全不同的方式實(shí)現(xiàn),這樣做不會(huì)偏離本發(fā)明的基本主旨。
由于這些各不相同的互補(bǔ)操作被交織在一個(gè)軟件循環(huán)中,并且該循環(huán)可以被重復(fù)循環(huán)執(zhí)行,因此一個(gè)結(jié)構(gòu)化對(duì)象的傳輸過(guò)程所涉及的各個(gè)階段可以在單次執(zhí)行或單個(gè)傳輸指令的框架內(nèi)并行執(zhí)行。利用以循環(huán)形式存儲(chǔ)的數(shù)據(jù)流,并無(wú)限重用相同的存儲(chǔ)器空間,如上所述,同一個(gè)指令就可以啟動(dòng)結(jié)構(gòu)化對(duì)象的完整傳輸,而且無(wú)論嵌入式平臺(tái)性能如何有限,對(duì)對(duì)象的大小都沒(méi)有限制。
上述轉(zhuǎn)換操作都被實(shí)現(xiàn)(即編程)在一個(gè)或多個(gè)程序中,這些程序被載入主機(jī)與嵌入式平臺(tái),因此所述的程序可以由用戶通過(guò)一些簡(jiǎn)單的指令來(lái)訪問(wèn)。
在此處所述的本發(fā)明版本中,就像應(yīng)用到Java語(yǔ)言及JavaCard環(huán)境中的那樣,應(yīng)用程序程序員只需利用這少數(shù)幾個(gè)簡(jiǎn)單的命令就可以創(chuàng)建應(yīng)用程序。這些指令執(zhí)行所有的中間操作,這些操作是對(duì)用戶可見(jiàn)的。換句話說(shuō),用戶不必關(guān)心所述指令機(jī)制的內(nèi)部工作。
例如,被載入到處理站或主機(jī)終端中的“ObjectIOProxy”類提供了“WriteObject()”和“ReadObject()”命令。
同樣,被載入到嵌入式平臺(tái)中的“ObjectIOApplet”類也提供“Process(Object)”和“SendObject()”命令。通常,“ObjectIOApplet”類利用已知的擴(kuò)展技術(shù)實(shí)現(xiàn)這些命令,即通過(guò)繼承含有“process(APDU)”方法的“IOApplet”類來(lái)實(shí)現(xiàn)。這包括向該方法中添加與初始方法組合在一起的程序代碼,并如初始方法中所定義的那樣修改或替換代碼的操作。
指令“WriteObject()”在其主機(jī)應(yīng)用程序中被用戶用來(lái)向卡應(yīng)用程序發(fā)送結(jié)構(gòu)化對(duì)象,以及在卡中開(kāi)始進(jìn)行處理。
在接收并反串行化一個(gè)結(jié)構(gòu)化對(duì)象之后,所述的卡自動(dòng)調(diào)用“Process(Object)”方法。該方法的內(nèi)容可由用戶編寫在被載入嵌入式平臺(tái)的應(yīng)用程序部分之中,以便對(duì)該對(duì)象執(zhí)行所需的操作。該方法接著以類似的方式被用于JavaCard中的標(biāo)準(zhǔn)“process(APDU)”命令,僅用于APDU格式的數(shù)據(jù)。
“SendObject()”指令被用戶用在被載入到嵌入式平臺(tái)的應(yīng)用程序部分中,例如在“Process(Object)”方法代碼內(nèi),以便準(zhǔn)備從嵌入式平臺(tái)向主機(jī)發(fā)送一個(gè)或多個(gè)結(jié)構(gòu)化對(duì)象。該指令接著以類似的方式被用于JavaCard中的標(biāo)準(zhǔn)“sendAPDU()”命令,僅用于APDU格式的數(shù)據(jù)。
“ReadObject()”指令在其主機(jī)應(yīng)用程序中被用戶用來(lái)從嵌入式平臺(tái)接收結(jié)構(gòu)化對(duì)象,所述的結(jié)構(gòu)化對(duì)象是卡應(yīng)用程序?yàn)樵撃康臏?zhǔn)備的。
可以理解,對(duì)于程序員來(lái)說(shuō),創(chuàng)建一個(gè)涉及該類嵌入式平臺(tái)的應(yīng)用程序,用以在所述的嵌入式平臺(tái)與主機(jī)或終端間傳送結(jié)構(gòu)化軟件對(duì)象,即使所述嵌入式平臺(tái)的通信資源不能以字節(jié)或整數(shù)形式傳送數(shù)據(jù),這樣做也是較為容易的。
能用若干簡(jiǎn)單指令來(lái)解除結(jié)構(gòu)化軟件對(duì)象的分配,或是重置或清除相應(yīng)的存儲(chǔ)器空間,以及復(fù)制結(jié)構(gòu)化軟件對(duì)象,這一點(diǎn)對(duì)于嵌入式應(yīng)用程序的程序員來(lái)說(shuō)是很有幫助的。在所述嵌入式平臺(tái)的編程環(huán)境不具有垃圾收集軟件工具的情況下-例如在JavaCard環(huán)境中,這一點(diǎn)尤其重要,所述的軟件工具能夠管理已分配存儲(chǔ)器空間的重用。
在符合本發(fā)明的一個(gè)程序版本中,在對(duì)象串行化期間用于結(jié)構(gòu)化軟件對(duì)象各個(gè)組件的解析步驟可以利用各種選項(xiàng)來(lái)完成。在同一個(gè)串行化命令的實(shí)現(xiàn)中可以包括多個(gè)這樣的選項(xiàng),該命令的每次執(zhí)行都伴有一個(gè)參數(shù),該參數(shù)指出必須使用哪個(gè)選項(xiàng)。這些各不相同的選項(xiàng)也可以被單獨(dú)使用在串行化命令的不同實(shí)現(xiàn)中。
在一個(gè)這樣的選項(xiàng)中,在對(duì)象串行化期間對(duì)該結(jié)構(gòu)化軟件對(duì)象的各個(gè)組成部分進(jìn)行解析的時(shí)候,串行化主體(212)取消含有該組成部分的存儲(chǔ)器空間的分配,或?qū)⑺龅慕M成部分標(biāo)為可以被重新用于新的分配。從而,使用該選項(xiàng)的串行化操作,稱為解構(gòu)串行化操作,執(zhí)行結(jié)構(gòu)化對(duì)象的轉(zhuǎn)換,其后該對(duì)象所占用的存儲(chǔ)器空間就會(huì)被釋放。
在另一個(gè)版本中,符合本發(fā)明的程序可以包括一個(gè)選項(xiàng)或命令,該選項(xiàng)或指令在任何發(fā)送操作之外對(duì)儲(chǔ)存在卡上的結(jié)構(gòu)化對(duì)象執(zhí)行該類解構(gòu)性串行化操作,例如在“ObjectIOApplet”類的實(shí)現(xiàn)中。很容易理解的是,符合本發(fā)明的程序使得用戶可以沒(méi)有任何困難地重用被應(yīng)用程序的全部或部分軟件對(duì)象占用的存儲(chǔ)器空間。
在另一個(gè)版本中(未示出),符合本發(fā)明的程序包括一個(gè)選項(xiàng)或命令,該選項(xiàng)或命令通過(guò)重用卡內(nèi)的存儲(chǔ)器空間來(lái)對(duì)一個(gè)結(jié)構(gòu)化對(duì)象進(jìn)行反串行化,所述的存儲(chǔ)器空間先前被一個(gè)結(jié)構(gòu)化對(duì)象占用,而該對(duì)象已經(jīng)被破壞,如上所述。該反串行化操作在任何發(fā)送操作之外執(zhí)行,從一個(gè)含有完全相同或非實(shí)質(zhì)性的數(shù)據(jù)的數(shù)據(jù)流進(jìn)行。在分配并寫入一個(gè)該類對(duì)象之后,被重用的存儲(chǔ)器空間中不含有任何屬于先前占用相關(guān)空間的對(duì)象的數(shù)據(jù)。如果該操作被實(shí)現(xiàn),例如實(shí)現(xiàn)在“ObjectIOApplet”類中,那么符合本發(fā)明的程序就使得用戶能夠毫無(wú)困難地編寫對(duì)應(yīng)于指定位置的存儲(chǔ)空間的全刪除操作。
在另一個(gè)版本中(未示出),符合本發(fā)明的程序包括一個(gè)選項(xiàng)或命令,該選項(xiàng)或命令在任何發(fā)送操作之外執(zhí)行一個(gè)結(jié)構(gòu)化對(duì)象到線性數(shù)據(jù)序列的串行化操作。然后,同一個(gè)線性數(shù)據(jù)序列被反串行化成一個(gè)與源對(duì)象相同的結(jié)果對(duì)象,但是它使用的不同的存儲(chǔ)空間。如果該操作被實(shí)現(xiàn),例如實(shí)現(xiàn)在“ObjectIOApplet”類中,那么符合本發(fā)明的程序就使得用戶能夠毫無(wú)困難地編寫結(jié)構(gòu)化軟件對(duì)象的全復(fù)制操作。
對(duì)于該領(lǐng)域內(nèi)的專家來(lái)說(shuō)顯而易見(jiàn)的是,本發(fā)明還提供了許多其他特定形式的版本,這樣做沒(méi)有偏離權(quán)利要求所提出的本發(fā)明的應(yīng)用領(lǐng)域。因此,以上所說(shuō)明的版本必須被看作是僅用于示范目的的,并且可以在附屬權(quán)利要求的范圍所定義的領(lǐng)域內(nèi)被修改。因此,本發(fā)明不能被局限于以上所述的細(xì)節(jié)。
權(quán)利要求
1.供計(jì)算機(jī)基站(2)用來(lái)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的過(guò)程,所述的計(jì)算機(jī)基站被稱為“嵌入式平臺(tái)”,它由一個(gè)便攜對(duì)象構(gòu)成,其中包括至少一個(gè)處理器、存儲(chǔ)設(shè)備以及通信資源,所述的通信資源能夠以一個(gè)或多個(gè)線性數(shù)據(jù)序列的形式與一臺(tái)終端交換信息,所述過(guò)程的特征在于它包括一個(gè)數(shù)據(jù)集合的轉(zhuǎn)換步驟,該轉(zhuǎn)換步驟沿一個(gè)方向或另一個(gè)方向在一方和另一方之間進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換的一方是包括線性數(shù)據(jù)序列的排列,而另一方則是描述或代表一個(gè)或多個(gè)軟件對(duì)象的結(jié)構(gòu)化排列,該軟件對(duì)象是根據(jù)一種面向?qū)ο缶幊陶Z(yǔ)言的規(guī)范被結(jié)構(gòu)化或?qū)哟位摹?br>
2.根據(jù)上述權(quán)利要求所述的過(guò)程,其特征在于它包括下列步驟-把要被發(fā)送的第一數(shù)據(jù)集從一種描述或代表軟件對(duì)象的結(jié)構(gòu)化排列轉(zhuǎn)換或串行化成一種代表所述第一數(shù)據(jù)集的線性數(shù)據(jù)序列,所述的第一數(shù)據(jù)集包括或代表了一個(gè)或多個(gè)軟件對(duì)象(31,41),這些軟件對(duì)象是根據(jù)一種面向?qū)ο缶幊陶Z(yǔ)言的規(guī)范被結(jié)構(gòu)化或?qū)哟位模?通過(guò)通信資源(200或100)將所述的線性數(shù)據(jù)序列從嵌入式平臺(tái)(2)發(fā)送給至少一個(gè)主機(jī)(1),即一臺(tái)終端或與終端相連的工作站,或是從所述的主機(jī)(1)發(fā)送到嵌入式平臺(tái)(2);- 在發(fā)送之后,將該線性數(shù)據(jù)序列轉(zhuǎn)換或反串行化成一個(gè)數(shù)據(jù)集,該數(shù)據(jù)集被排列成一個(gè)或多個(gè)結(jié)構(gòu)化的軟件對(duì)象(34或44),這些軟件對(duì)象重現(xiàn)或代表了所述第一數(shù)據(jù)集。
3.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的主機(jī)終端(1)利用一個(gè)軟件主體(101)向所述的嵌入式平臺(tái)(2)發(fā)送信息,該軟件主體被稱為發(fā)送函數(shù),所述的信息在嵌入式平臺(tái)中被一個(gè)響應(yīng)函數(shù)(201)接收,該響應(yīng)函數(shù)能夠通過(guò)至少一個(gè)接收方軟件主體(221)啟動(dòng)一個(gè)對(duì)所述數(shù)據(jù)的處理過(guò)程(2210),所述的接收方軟件主體被儲(chǔ)存在嵌入式平臺(tái)中,并且構(gòu)成了至少一個(gè)應(yīng)用過(guò)程(21)的一部分,所述的過(guò)程包括下列步驟- 由一個(gè)通信主體(211)代表接收方主體(221)接收數(shù)據(jù)集(32),該數(shù)據(jù)集是由所述的響應(yīng)函數(shù)(201)為所述的接收方軟件主體接收的,所述的數(shù)據(jù)集被排列成一個(gè)線性數(shù)據(jù)序列;- 將該數(shù)據(jù)集轉(zhuǎn)換成至少一個(gè)軟件對(duì)象(34),該軟件對(duì)象根據(jù)一種面向?qū)ο缶幊陶Z(yǔ)言的規(guī)范被結(jié)構(gòu)化或?qū)哟位? 將所述的結(jié)構(gòu)化軟件對(duì)象(34)發(fā)送給接收方主體(221),并由所述的接收方主體根據(jù)所述對(duì)象啟動(dòng)一個(gè)處理過(guò)程(2210)。
4.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于它包括下列步驟- 由響應(yīng)函數(shù)(201)從主機(jī)(1)的發(fā)送函數(shù)(101)以至少一個(gè)發(fā)送參數(shù)(32)的形式接收至少一個(gè)數(shù)據(jù)項(xiàng),并將該參數(shù)發(fā)送給一個(gè)儲(chǔ)存或運(yùn)行在嵌入式平臺(tái)(2)上的通信主體(211);- 由通信主體(211)將響應(yīng)主體(201)發(fā)送來(lái)的至少一個(gè)發(fā)送參數(shù)(32)轉(zhuǎn)換或連接成一個(gè)被排列成線性數(shù)據(jù)序列的數(shù)據(jù)集,并將這些數(shù)據(jù)儲(chǔ)存在嵌入式平臺(tái)(2)的輸入流(33)中;- 由儲(chǔ)存或運(yùn)行在嵌入式平臺(tái)(2)上的串行化主體(212)將儲(chǔ)存在所述輸入流(33)中的至少一部分?jǐn)?shù)據(jù)轉(zhuǎn)換或反串行化成一個(gè)數(shù)據(jù)集,該數(shù)據(jù)集包括或代表了至少一個(gè)結(jié)構(gòu)化軟件對(duì)象(34);- 由所述的接收方主體(221)接收所述結(jié)構(gòu)化軟件對(duì)象(34)或其引用。
5.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于它包括下列步驟- 從一個(gè)軟件主體(221)向一個(gè)串行化主體(212)發(fā)送一個(gè)結(jié)構(gòu)化軟件對(duì)象(41)或其代表,所述的軟件主體構(gòu)成了儲(chǔ)存或運(yùn)行在嵌入式平臺(tái)(2)上的應(yīng)用過(guò)程(22)的一部分,而所述的串行化主體被儲(chǔ)存或運(yùn)行在所述的嵌入式平臺(tái)上;- 由所述的串行化主體(212)將所述的結(jié)構(gòu)化軟件對(duì)象(41)轉(zhuǎn)換或串行化成一個(gè)被排列成線性數(shù)據(jù)序列的數(shù)據(jù)集,并將這些數(shù)據(jù)儲(chǔ)存在嵌入式平臺(tái)上的一個(gè)輸出流(42)中;- 由一個(gè)儲(chǔ)存或運(yùn)行在嵌入式平臺(tái)(2)上的通信主體(211)將儲(chǔ)存在所述輸出流(42)中的數(shù)據(jù)的至少一部分轉(zhuǎn)換成一個(gè)響應(yīng)參數(shù)集(43),該參數(shù)集能夠被響應(yīng)函數(shù)(201)發(fā)送;- 由響應(yīng)函數(shù)(201)將所述的響應(yīng)參數(shù)(43)從嵌入式平臺(tái)(2)發(fā)送到主機(jī)終端(1),該發(fā)送過(guò)程是響應(yīng)函數(shù)主動(dòng)進(jìn)行或是響應(yīng)于主機(jī)終端(1)的發(fā)送函數(shù)(101)而進(jìn)行的。
6.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于儲(chǔ)存在輸入流(33)或輸出流(42)中的線性數(shù)據(jù)序列代表了一個(gè)或多個(gè)軟件對(duì)象(31或41),這些軟件對(duì)象是利用一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)被結(jié)構(gòu)化或?qū)哟位说模龅臄?shù)據(jù)項(xiàng)被稱為標(biāo)簽,具有一個(gè)或多個(gè)給定值,所述每個(gè)指定值代表要對(duì)所述線性數(shù)據(jù)序列的反串行化執(zhí)行的指定行為。
7.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于至少一個(gè)標(biāo)簽被定義為代表下列行為之一- 向所述線性數(shù)據(jù)序列代表的結(jié)構(gòu)化對(duì)象的結(jié)構(gòu)中添加一個(gè)新元素;- 引用一個(gè)元素或?qū)ο螅鳛樵磳?duì)象,作為構(gòu)成結(jié)構(gòu)化對(duì)象的一個(gè)元素的全部或部分的值的源;- 指示出其后的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)代表了構(gòu)成結(jié)構(gòu)化對(duì)象的一個(gè)元素的內(nèi)容;- 指示出構(gòu)成結(jié)構(gòu)化對(duì)象的一個(gè)元素的內(nèi)容缺失。
8.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的串行化主體(212)在一個(gè)被稱為串行化過(guò)程的過(guò)程之后將一個(gè)被稱為源對(duì)象的結(jié)構(gòu)化對(duì)象(41)串行化成一個(gè)線性數(shù)據(jù)集(42),所述的過(guò)程通過(guò)下列步驟處理所述對(duì)象(410至414)中的至少一個(gè),這些對(duì)象被稱為元素,它們構(gòu)成了所述結(jié)構(gòu)化源對(duì)象(41)的結(jié)構(gòu)或樹(shù)狀結(jié)構(gòu)- 由串行化主體(212)檢測(cè)出被稱為當(dāng)前對(duì)象的一個(gè)元素(410,414)的類型(4100),所述元素構(gòu)成所述結(jié)構(gòu)化對(duì)象(41)的結(jié)構(gòu)或樹(shù)狀結(jié)構(gòu);- 將代表一個(gè)標(biāo)簽的數(shù)據(jù)項(xiàng)存儲(chǔ)在輸出流(42)中,隨后存放代表當(dāng)前對(duì)象類型(TYOBJ)的數(shù)據(jù)項(xiàng),所述標(biāo)簽指示添加一個(gè)新元素;- 由與當(dāng)前對(duì)象類型(TYOBJ)相關(guān)聯(lián)的類型串行化主體(TM0,TM1,TM2)在輸出流中儲(chǔ)存,在流中已有的元素之后● 或是通過(guò)一個(gè)代表結(jié)構(gòu)化對(duì)象(41)的全部或部分(412,413,411)的值的數(shù)據(jù)項(xiàng)(424,425,429),● 或是通過(guò)代表一個(gè)標(biāo)簽(4211)的數(shù)據(jù)項(xiàng)(4211,4212),該標(biāo)簽指示引用一個(gè)對(duì)象(410)作為所述結(jié)構(gòu)化對(duì)象(41)的全部或部分(414)的值的源,該標(biāo)簽之后跟隨著標(biāo)識(shí)所述源對(duì)象(410)的一個(gè)數(shù)據(jù)項(xiàng)(4212)。
9.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的串行化過(guò)程將一個(gè)結(jié)構(gòu)化對(duì)象(41)轉(zhuǎn)換到輸出流(42)中,并在每次重復(fù)中將各個(gè)當(dāng)前對(duì)象的類型儲(chǔ)存在一個(gè)存儲(chǔ)器堆棧(TYST)中,該堆棧被稱為類型堆棧,讀取該堆棧存儲(chǔ)位置的順序與存入順序相反。
10.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的串行化主體(212)在一個(gè)被稱為反串行化過(guò)程的過(guò)程之后將一個(gè)線性數(shù)據(jù)集反串行化成至少一個(gè)結(jié)構(gòu)化結(jié)果對(duì)象(34),所述的過(guò)程通過(guò)下列步驟處理儲(chǔ)存在輸入流(33)中的每個(gè)數(shù)據(jù)項(xiàng)-由串行化主體讀取儲(chǔ)存在輸入流中先前已被處理過(guò)的數(shù)據(jù)之后的至少一個(gè)數(shù)據(jù)項(xiàng);-分析該數(shù)據(jù)項(xiàng)并執(zhí)行對(duì)應(yīng)于所述數(shù)據(jù)項(xiàng)的行為。
11.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的反串行化過(guò)程涉及載入一個(gè)被稱為當(dāng)前對(duì)象的元素,即向所述當(dāng)前對(duì)象的全部或部分指定一個(gè)直接或間接值,所述的元素構(gòu)成結(jié)構(gòu)化結(jié)果對(duì)象(34)的結(jié)構(gòu)的全部或部分,隨后當(dāng)前對(duì)象的載入的結(jié)束而開(kāi)始- 讀取儲(chǔ)存在存儲(chǔ)器結(jié)構(gòu)的下一個(gè)位置中的代表了一個(gè)對(duì)象類型的數(shù)據(jù)項(xiàng)(TYT2),并從該位置刪除該數(shù)據(jù)項(xiàng),所述的存儲(chǔ)器結(jié)構(gòu)被稱為類型堆棧(TYST);- 將從類型堆棧中讀出的數(shù)據(jù)項(xiàng)(TYT2)所代表的類型儲(chǔ)存為新的當(dāng)前對(duì)象類型(TYOBJ)。
12.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于當(dāng)所述的類型堆棧(TYST)為空時(shí),反串行化過(guò)程所創(chuàng)建的結(jié)構(gòu)化對(duì)象(34)被認(rèn)為是完整的,并被發(fā)送給軟件主體(221)或應(yīng)用過(guò)程(22),所述的軟件主體或應(yīng)用過(guò)程是所述對(duì)象的接收方。
13.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于對(duì)應(yīng)一個(gè)數(shù)據(jù)項(xiàng)(321,326)的反串行化行為包括下列步驟,所述的數(shù)據(jù)項(xiàng)代表一個(gè)被稱為“NEW”的標(biāo)簽,該標(biāo)簽指示一個(gè)新元素- 讀取輸入流中的至少一個(gè)后續(xù)數(shù)據(jù)項(xiàng)(322,327);- 將所述后續(xù)數(shù)據(jù)項(xiàng)(322,327)所代表的對(duì)象類型儲(chǔ)存在一個(gè)存儲(chǔ)器堆棧中,緊隨已經(jīng)被儲(chǔ)存在其中的類型,所述的存儲(chǔ)器堆棧被稱為類型堆棧(TYST)。
14.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于反串行化過(guò)程所用的類型堆棧(TYST)包括一個(gè)LIFO類型堆棧,即該堆棧中位置的讀取順序與儲(chǔ)存順序相反。
15.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的反串行化過(guò)程包括一個(gè)步驟,該步驟通過(guò)分配一個(gè)新的存儲(chǔ)空間或重用一個(gè)自由空間,來(lái)創(chuàng)建構(gòu)成所述結(jié)構(gòu)化結(jié)果軟件對(duì)象(34)結(jié)構(gòu)的元素(410至414),所述的創(chuàng)建步驟由一個(gè)對(duì)應(yīng)于將被創(chuàng)建元素的類型的類型管理器主體(TM0,TM1,TM2)執(zhí)行。
16.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于構(gòu)成所述結(jié)構(gòu)化結(jié)果軟件對(duì)象(34)結(jié)構(gòu)的元素(410至414)的創(chuàng)建步驟是在表示所述元素創(chuàng)建的數(shù)據(jù)項(xiàng)(322,327)的讀取步驟與用于同一個(gè)元素的第一載入步驟之間進(jìn)行的。
17.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于對(duì)應(yīng)于一個(gè)數(shù)據(jù)項(xiàng)(324,325,329)的行為包括將該數(shù)據(jù)項(xiàng)的值儲(chǔ)存到分配給當(dāng)前對(duì)象的存儲(chǔ)器空間中的步驟,所述的數(shù)據(jù)項(xiàng)被稱為簡(jiǎn)單數(shù)據(jù)項(xiàng),即它不代表一個(gè)標(biāo)簽。
18.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于,在反串行化過(guò)程期間,為構(gòu)成所述結(jié)構(gòu)化結(jié)果對(duì)象(34)的結(jié)構(gòu)的至少一個(gè)元素(410)分配一個(gè)對(duì)象標(biāo)號(hào)(4102),所述的對(duì)象標(biāo)號(hào)以一種唯一的方式標(biāo)識(shí)所述的元素,從而所述的元素可以被其他對(duì)象或元素(414)指定或引用。
19.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于對(duì)應(yīng)于一個(gè)數(shù)據(jù)項(xiàng)(3211)的行為包括下列步驟,所述的數(shù)據(jù)項(xiàng)代表一個(gè)被稱為“REF”標(biāo)簽的標(biāo)簽,該標(biāo)簽表示一個(gè)引用- 讀取輸入流(32)中的至少一個(gè)后續(xù)數(shù)據(jù)項(xiàng)(3212);- 將一個(gè)數(shù)據(jù)項(xiàng)儲(chǔ)存在分配給當(dāng)前對(duì)象(344)的存儲(chǔ)器空間(3441)中,緊接著已被存儲(chǔ)的數(shù)據(jù),所述的數(shù)據(jù)項(xiàng)指定了一個(gè)對(duì)象(340)作為當(dāng)前對(duì)象的所有或部分的值的源,所述的源對(duì)象或元素(340)由所述的后續(xù)數(shù)據(jù)項(xiàng)(3212)標(biāo)識(shí)。
20.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于當(dāng)儲(chǔ)存在指定存儲(chǔ)器空間內(nèi)的數(shù)據(jù)達(dá)到一個(gè)給定長(zhǎng)度時(shí),就考慮終止當(dāng)前對(duì)象的載入,所述的長(zhǎng)度由嵌入式平臺(tái)中的類型管理器主體(TM0、TM1、TM2)或通用類型管理器主體(TMG)從卡(2)的存儲(chǔ)器中讀出。
21.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于由嵌入式平臺(tái)(2)向主機(jī)(1)發(fā)送一個(gè)給定長(zhǎng)度的線性數(shù)據(jù)序列(42)是根據(jù)一個(gè)重復(fù)過(guò)程執(zhí)行的,該過(guò)程被稱為數(shù)據(jù)讀取過(guò)程,其中包括下列重復(fù)步驟- 由主機(jī)發(fā)送一條通信指令,該指令伴有至少一個(gè)代表已接收數(shù)據(jù)長(zhǎng)度的發(fā)送參數(shù);- 由嵌入式平臺(tái)接收所述的發(fā)送參數(shù),并與待發(fā)送的線性數(shù)據(jù)序列進(jìn)行比較;- 通過(guò)發(fā)送至少一個(gè)返回參數(shù)(43)來(lái)響應(yīng)所述的通信指令,所述的返回參數(shù)代表緊接在主機(jī)已經(jīng)接收到的數(shù)據(jù)之后的一個(gè)工多個(gè)數(shù)據(jù)項(xiàng);- 由主機(jī)接收通信指令返回參數(shù)(43),并將它代表的數(shù)據(jù)儲(chǔ)存在已經(jīng)接收到的數(shù)據(jù)之后。
22.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于由嵌入式平臺(tái)(2)從主機(jī)(1)接收一個(gè)給定長(zhǎng)度的線性數(shù)據(jù)序列(43),是根據(jù)一個(gè)重復(fù)過(guò)程執(zhí)行的,該過(guò)程被稱為數(shù)據(jù)寫入過(guò)程,它包括下列重復(fù)步驟- 由主機(jī)發(fā)送一條通信指令,該指令伴有至少一個(gè)第一發(fā)送參數(shù)(32),該參數(shù)代表了待發(fā)送的線性數(shù)據(jù)序列中緊接著已發(fā)送部分的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng),并且在適當(dāng)?shù)那闆r下,所述的指令還伴有一個(gè)第二發(fā)送參數(shù),該參數(shù)代表了第一發(fā)送參數(shù)所代表的數(shù)據(jù)在待發(fā)送序列中的位置,或是已經(jīng)被發(fā)送的數(shù)據(jù)長(zhǎng)度;- 由嵌入式平臺(tái)接收一個(gè)或多個(gè)通信指令發(fā)送參數(shù)(32);- 將第一發(fā)送參數(shù)(32)所代表的數(shù)據(jù)儲(chǔ)存在嵌入式平臺(tái)的輸入流(33)中,緊接著已接收數(shù)據(jù)之后。
23.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的數(shù)據(jù)寫入過(guò)程還包括下列步驟- 由所述的嵌入式平臺(tái)比較第二發(fā)送參數(shù),以及比較已接收數(shù)據(jù)的長(zhǎng)度;- 由所述的嵌入式平臺(tái)返回至少一個(gè)響應(yīng)參數(shù),該響應(yīng)參數(shù)或是代表已接收數(shù)據(jù)的長(zhǎng)度,或是代表該比較結(jié)果的數(shù)據(jù)項(xiàng),或者兩者兼有。
24.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于串行化、反串行化、數(shù)據(jù)讀取或數(shù)據(jù)寫入過(guò)程中的至少兩個(gè)被并行執(zhí)行,或是通過(guò)一個(gè)步驟的重復(fù)被交織進(jìn)行,所述步驟包括連續(xù)執(zhí)行每個(gè)所述過(guò)程的至少一個(gè)步驟。
25.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的輸入流或輸出流或兩者,被儲(chǔ)存為重復(fù)存儲(chǔ)結(jié)構(gòu)的形式,從而使得所述的兩個(gè)流能夠共享同一個(gè)重復(fù)結(jié)構(gòu)。
26.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的嵌入式平臺(tái)擁有一個(gè)可編程環(huán)境,它能夠儲(chǔ)存并執(zhí)行至少一個(gè)由過(guò)程員創(chuàng)建的應(yīng)用過(guò)程,所述的通信功能與ISO 7816標(biāo)準(zhǔn)中所定義的APDU格式相兼容。
27.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于對(duì)于一個(gè)接收對(duì)象的反串行化與處理操作是由至少一條APDU格式命令的接收引起的,所述命令中包含至少一個(gè)指示結(jié)構(gòu)化對(duì)象接收的數(shù)據(jù)項(xiàng)。
28.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于所述的嵌入式平臺(tái)擁有一個(gè)與JavaCard標(biāo)準(zhǔn)相兼容的可編程環(huán)境。
29.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于在主機(jī)或嵌入式平臺(tái)上運(yùn)行的至少一個(gè)應(yīng)用過(guò)程是用Java語(yǔ)言編寫的。
30.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于數(shù)據(jù)讀取、數(shù)據(jù)寫入、反串行化以及串行化過(guò)程都通過(guò)在至少一個(gè)類中的實(shí)現(xiàn)來(lái)完成,所述的類被儲(chǔ)存在主機(jī)或嵌入式平臺(tái)中,所述實(shí)現(xiàn)包括下列命令中的至少一條- 對(duì)象寫入命令,通過(guò)對(duì)該對(duì)象使用串行化過(guò)程,并接著執(zhí)行數(shù)據(jù)寫入和反串行化過(guò)程,將一個(gè)結(jié)構(gòu)化對(duì)象(31)發(fā)送給嵌入式平臺(tái)的至少一個(gè)主體(221);- 對(duì)象讀取命令,通過(guò)使用串行化過(guò)程,并接著執(zhí)行數(shù)據(jù)讀取與反串行化過(guò)程,從嵌入式平臺(tái)的至少一個(gè)主體(221)讀取一個(gè)結(jié)構(gòu)化對(duì)象(41);- 用于儲(chǔ)存在嵌入式平臺(tái)中的結(jié)構(gòu)化對(duì)象的解除分配命令,該指令利用了串行化過(guò)程,后者還包括在分析了所述組成部分的結(jié)構(gòu)之后將分配給所述對(duì)象的各個(gè)組成部分的存儲(chǔ)空間釋放或解除分配的步驟;- 用于被一個(gè)結(jié)構(gòu)化對(duì)象釋放的存儲(chǔ)空間的內(nèi)部管理或刪除命令,其通過(guò)利用反串行化過(guò)程從一個(gè)給定的線性數(shù)據(jù)序列創(chuàng)建一個(gè)具有非實(shí)質(zhì)內(nèi)容的對(duì)象;- 用于被稱為源對(duì)象的結(jié)構(gòu)化對(duì)象的復(fù)制命令,其利用串行化過(guò)程來(lái)創(chuàng)建一個(gè)代表同一對(duì)象的線性數(shù)據(jù)序列,但不對(duì)所述源對(duì)象進(jìn)行解除分配,隨后利用反串行化過(guò)程,從該線性數(shù)據(jù)序列創(chuàng)建另一個(gè)結(jié)構(gòu)化對(duì)象,該對(duì)象的內(nèi)容與源對(duì)象完全相同。
31.根據(jù)前面一個(gè)權(quán)利要求所述的過(guò)程,其特征在于所述嵌入式平臺(tái)的編程語(yǔ)言中含有一個(gè)第一類(IOApplet),該類描述了一種ProcessAPDU抽象方法,在接收到APDU消息時(shí)在應(yīng)用過(guò)程中啟動(dòng)一個(gè)用戶定義的進(jìn)程;在嵌入式平臺(tái)上執(zhí)行反串行化操作的過(guò)程代碼被儲(chǔ)存在所述的嵌入式平臺(tái)中,作為所述ProcessAPDU抽象方法的具體實(shí)現(xiàn),在從第一類(IOApplet)繼承而來(lái)的第二類(ObjectIOApplet)中,所述的過(guò)程代碼調(diào)用一個(gè)ProcessObject方法,后者在同一實(shí)現(xiàn)類(ObjectIOApplet)中被描述為一個(gè)抽象方法。
32.根據(jù)權(quán)利要求(Javacard)所述的過(guò)程,其特征在于所述嵌入式平臺(tái)的編程語(yǔ)言中含有一個(gè)第一類(IOApplet),該類描述了一個(gè)SendAPDU方法,該方法將一個(gè)APDU格式消息發(fā)送給主機(jī);在嵌入式平臺(tái)上執(zhí)行所述串行化操作的過(guò)程代碼被儲(chǔ)存在從第一類(IOApplet)繼承而來(lái)的第二類(ObjectIOApplet)中,其作為調(diào)用SendAPDU方法的至少一個(gè)SendObject方法的具體實(shí)現(xiàn)。
33.根據(jù)上述權(quán)利要求之一所述的過(guò)程,其特征在于該過(guò)程被用于至少一個(gè)被稱為卡主體的軟件主體和至少一個(gè)被稱為卡引擎代理主體的軟件主體之間的通信,前者被儲(chǔ)存或運(yùn)行在嵌入式平臺(tái)上,后者則被儲(chǔ)存或執(zhí)行在至少一臺(tái)主機(jī)上,該主機(jī)屬于一個(gè)計(jì)算機(jī)網(wǎng)絡(luò),該網(wǎng)絡(luò)通過(guò)符合AAAMOM類軟件基礎(chǔ)設(shè)施的異步消息進(jìn)行通信,所述的卡引擎代理主體為所述的卡主體與所述網(wǎng)絡(luò)中其他主體間的通信起到了中介的作用,所述的主體根據(jù)所述軟件基礎(chǔ)設(shè)施的規(guī)范工作,并且該主體屬于至少一個(gè)分布式的應(yīng)用過(guò)程。
34.由一個(gè)計(jì)算機(jī)基站(2)構(gòu)成的計(jì)算機(jī)系統(tǒng),其被稱為嵌入式平臺(tái),該嵌入式平臺(tái)包括一個(gè)便攜對(duì)象,該便攜對(duì)象至少包含一個(gè)處理器、存儲(chǔ)設(shè)備以及通信資源,所述的通信資源能夠以一個(gè)或多個(gè)線性數(shù)據(jù)序列的形式與一個(gè)終端交換信息,其特征在于,該平臺(tái)帶有一個(gè)串行化主體(212),它能夠?qū)σ粋€(gè)數(shù)據(jù)集合沿一個(gè)方向或另一個(gè)方向在一方和另一方之間執(zhí)行一個(gè)轉(zhuǎn)換步驟,轉(zhuǎn)換的一方是一種線性數(shù)據(jù)序列排列,另一方是描述或代表一個(gè)或多個(gè)軟件對(duì)象的結(jié)構(gòu)化排列,這種結(jié)構(gòu)化排列是根據(jù)一種面向?qū)ο缶幊陶Z(yǔ)言的規(guī)范被結(jié)構(gòu)化或?qū)哟位摹?br>
35.根據(jù)前一個(gè)權(quán)利要求所述的系統(tǒng),其特征在于所述的嵌入式平臺(tái)(2)包括一個(gè)通信主體(211),該主體能夠- 代表接收方主體(221)接收一個(gè)數(shù)據(jù)集(32),該數(shù)據(jù)集是響應(yīng)函數(shù)(201)為儲(chǔ)存在嵌入式平臺(tái)上的接收方軟件主體(221)接收的,所述的數(shù)據(jù)集被排列成一個(gè)或多個(gè)線性數(shù)據(jù)序列;- 將所述的數(shù)據(jù)集轉(zhuǎn)換成至少一個(gè)軟件對(duì)象(34),該軟件對(duì)象根據(jù)一種面向?qū)ο缶幊陶Z(yǔ)言的規(guī)范被結(jié)構(gòu)化或?qū)哟位? 將所述的結(jié)構(gòu)化軟件對(duì)象(34)發(fā)送給接收方主體(221),并由所述的接收方主體(221)根據(jù)所述的對(duì)象開(kāi)始執(zhí)行進(jìn)程(2210)。
36.根據(jù)前面的權(quán)利要求之一所述的系統(tǒng),其特征在于代表一個(gè)結(jié)構(gòu)化軟件對(duì)象的線性數(shù)據(jù)序列被儲(chǔ)存在嵌入式平臺(tái)的一個(gè)輸入或輸出流中,所述的嵌入式平臺(tái)包括一個(gè)被稱為串行化主體(212)的軟件主體,它能夠創(chuàng)建嵌入式平臺(tái)中的輸入流所代表的一個(gè)或多個(gè)所述的結(jié)構(gòu)化對(duì)象,即反串行化所述的結(jié)構(gòu)化對(duì)象,或是將代表待發(fā)送的一個(gè)或多個(gè)結(jié)構(gòu)化對(duì)象或待發(fā)送對(duì)象的數(shù)據(jù)寫入到輸出流中,即串行化所述的結(jié)構(gòu)化對(duì)象。
37.根據(jù)上述權(quán)利要求之一所述的系統(tǒng),其特征在于所述的輸入流或輸出流被儲(chǔ)存成一個(gè)或多個(gè)重復(fù)存儲(chǔ)結(jié)構(gòu)的形式。
38.根據(jù)上述權(quán)利要求之一所述的系統(tǒng),其特征在于所述的串行化主體(212)使用一個(gè)被稱為類型堆棧的存儲(chǔ)器堆棧來(lái)儲(chǔ)存至少一個(gè)對(duì)象的類型,所述對(duì)象構(gòu)成了要被串行化或反串行化的結(jié)構(gòu)化對(duì)象的結(jié)構(gòu)的全部或部分,所述的類型堆棧包括多個(gè)存儲(chǔ)位置,這些存儲(chǔ)位置只能在最近載入的存儲(chǔ)位置被讀出并刪除之后才能被訪問(wèn)。
39.根據(jù)上述權(quán)利要求之一所述的系統(tǒng),其特征在于包含在輸入或輸出流中的數(shù)據(jù)代表一個(gè)或多個(gè)結(jié)構(gòu)化對(duì)象,其使用了一種包括一組標(biāo)簽的編碼系統(tǒng),每個(gè)所述的標(biāo)簽都代表一種要對(duì)所述線性數(shù)據(jù)序列的反串行化過(guò)程執(zhí)行的一個(gè)給定行為。
40.根據(jù)上述權(quán)利要求之一所述的系統(tǒng),其特征在于至少有一個(gè)標(biāo)簽被定義為代表下列行為之一- 向線性數(shù)據(jù)序列所代表的結(jié)構(gòu)化對(duì)象結(jié)構(gòu)中加入一個(gè)新元素;- 引用一個(gè)元素或?qū)ο?,作為源?duì)象,將其作為構(gòu)成結(jié)構(gòu)化對(duì)象的一個(gè)元素的全部或部分的值的源;- 指示出隨后的一個(gè)或多個(gè)數(shù)據(jù)項(xiàng)代表了構(gòu)成所述結(jié)構(gòu)化對(duì)象的一個(gè)元素的內(nèi)容;- 指示出構(gòu)成所述結(jié)構(gòu)化對(duì)象的一個(gè)元素的內(nèi)容缺失。
41.根據(jù)上述權(quán)利要求之一所述的系統(tǒng),其特征在于所述的嵌入式平臺(tái)包括一個(gè)便攜對(duì)象,該對(duì)象根據(jù)標(biāo)準(zhǔn)ISO 7816工作,并且使用APDU格式的指令。
42.根據(jù)上述權(quán)利要求之一所述的系統(tǒng),其特征在于存儲(chǔ)在嵌入式平臺(tái)中的至少一個(gè)主體或應(yīng)用過(guò)程是用Java語(yǔ)言編寫的,所述的嵌入式平臺(tái)擁有一個(gè)符合JavaCard標(biāo)準(zhǔn)的計(jì)算機(jī)環(huán)境。
43.根據(jù)上述權(quán)利要求之一所述的系統(tǒng),其特征在于它在主機(jī)、嵌入式平臺(tái)或兩者中包括至少一個(gè)軟件類,該軟件類實(shí)現(xiàn)下列命令中的至少一條- 對(duì)象寫入命令,通過(guò)在主機(jī)中將所述的結(jié)構(gòu)化對(duì)象(31)串行化成一個(gè)數(shù)據(jù)流,并隨后將該數(shù)據(jù)流發(fā)送給嵌入式平臺(tái),并在嵌入式平臺(tái)中將所述的數(shù)據(jù)流反串行化成結(jié)構(gòu)化對(duì)象,來(lái)把一個(gè)結(jié)構(gòu)化對(duì)象(31)發(fā)送給所述卡的至少一個(gè)主體;- 對(duì)象讀取命令,通過(guò)在嵌入式平臺(tái)中將所述的結(jié)構(gòu)化對(duì)象串行化成一個(gè)數(shù)據(jù)流,并隨后從嵌入式平臺(tái)接收該數(shù)據(jù)流,并在主機(jī)中將所述的數(shù)據(jù)流反串行化成一個(gè)結(jié)構(gòu)化對(duì)象,來(lái)從所述卡的至少一個(gè)主體(221)讀取一個(gè)結(jié)構(gòu)化對(duì)象(41);- 解除分配命令,用于儲(chǔ)存在嵌入式平臺(tái)中的結(jié)構(gòu)化對(duì)象,該指令根據(jù)一個(gè)選項(xiàng)串行化所述的對(duì)象,所述的選項(xiàng)包括在分析了所述對(duì)象各部分的結(jié)構(gòu)之后釋放或解除分配給該對(duì)象各個(gè)部分的存儲(chǔ)空間;- 用于被嵌入式平臺(tái)中的一個(gè)結(jié)構(gòu)化對(duì)象釋放的存儲(chǔ)空間的內(nèi)部管理或刪除命令,該指令通過(guò)反串行化一個(gè)給定的線性數(shù)據(jù)序列來(lái)創(chuàng)建一個(gè)具有非實(shí)質(zhì)內(nèi)容的對(duì)象;- 用于在嵌入式平臺(tái)中復(fù)制結(jié)構(gòu)化對(duì)象的指令,被復(fù)制的對(duì)象稱為源對(duì)象,該指令通過(guò)串行化為代表同一個(gè)對(duì)象的線性數(shù)據(jù)序列,但不對(duì)所述源對(duì)象進(jìn)行解除分配,隨后將該線性數(shù)據(jù)序列反串行化成另一個(gè)結(jié)構(gòu)化對(duì)象,該對(duì)象的內(nèi)容與源對(duì)象完全相同。
44.根據(jù)上述權(quán)利要求之一所述的系統(tǒng),其特征在于所述的嵌入式平臺(tái)與至少一臺(tái)屬于某個(gè)計(jì)算機(jī)網(wǎng)絡(luò)的主機(jī)進(jìn)行通信,所述網(wǎng)絡(luò)通過(guò)符合AAA-MOM類型軟件基礎(chǔ)設(shè)施的異步消息進(jìn)行通信,所述的主機(jī)包括一個(gè)被稱為卡引擎代理主體的軟件主體,該軟件主體能夠管理所述嵌入式平臺(tái)與所述網(wǎng)絡(luò)中其他主體間的通信,所述的主體根據(jù)所述軟件基礎(chǔ)設(shè)施的規(guī)范進(jìn)行工作,并且屬于至少一個(gè)分布式的應(yīng)用過(guò)程。
全文摘要
本發(fā)明涉及用來(lái)將結(jié)構(gòu)化軟件對(duì)象轉(zhuǎn)換成原始數(shù)據(jù)流以及進(jìn)行反向轉(zhuǎn)換的循環(huán)程序,該程序利用簡(jiǎn)單的通信資源-如嵌入式計(jì)算機(jī)基站-來(lái)提供它們(數(shù)據(jù)流)的直接傳輸,還提供所述軟件對(duì)象的重置,或是對(duì)分配給它們的存儲(chǔ)器空間的重用。該程序可被嵌入式平臺(tái)(2)或便攜對(duì)象使用,所述的便攜對(duì)象至少包括一個(gè)處理器,該處理器能夠以線性數(shù)據(jù)序列的形式與一臺(tái)終端交換信息。該程序包括用來(lái)向一個(gè)方向或另一個(gè)方向轉(zhuǎn)換數(shù)據(jù)集的步驟,轉(zhuǎn)換的一方是線性數(shù)據(jù)序列組織形式,另一方是描述或代表一個(gè)面向?qū)ο蟮能浖?duì)象的結(jié)構(gòu)化組織形式。
文檔編號(hào)G07F7/10GK1643552SQ03807289
公開(kāi)日2005年7月20日 申請(qǐng)日期2003年2月26日 優(yōu)先權(quán)日2002年2月28日
發(fā)明者奧利維爾·法布恩, 安德烈·弗雷西內(nèi), 塞爾日·拉庫(kù)爾特 申請(qǐng)人:艾斯奧托公司