專利名稱:多語言開發(fā)系統(tǒng)中實現(xiàn)不同語言間數(shù)據(jù)通信的方法
技術領域:
本發(fā)明涉及計算機技術領域,尤其涉及一種多語言開發(fā)系統(tǒng)中實現(xiàn)不同語言間數(shù)據(jù)通信的方法。
背景技術:
在計算機軟件系統(tǒng)的開發(fā)中,由于各種原因,往往需要利用多種語言進行混合開發(fā)。例如,基于如下原因,一個軟件系統(tǒng)的開發(fā)經常會使用JAVA語言、C語言進行混合開發(fā)
1.標準的JAVA類庫不支持一些硬件相關的功能;
2.有大量的用C語言進行編寫并封裝好的類庫,如果再用JAVA進行重新編寫,將會是一種資源上的浪費,增加系統(tǒng)開發(fā)成本、系統(tǒng)開發(fā)周期以及系統(tǒng)失敗的風險;
3.基于性能考慮,用C語言編寫性能要求很高的代碼。為了解決多語言開發(fā)系統(tǒng)中不同語言編寫的應用之間的數(shù)據(jù)通信問題,目前已提出了一些方案。例如,為了解決JAVA語言與其他語言進行混合編程,SUN公司提供了 JNI(Java Native Interface)技術以及與這種技術相關聯(lián)的一系列類庫、類、方法與屬性。按照JNI提供的參考手冊與當前資料所介紹的方法在JAVA與C之間進行參數(shù)傳遞,進行通信的話,JAVA與C之間的耦合度太多,開發(fā)過程中交互復雜且不利于相互之間的獨立,對原先用C編寫好的代碼將會提出較多的修改要求。其它現(xiàn)有技術也不同程度第存在類似問題。
發(fā)明內容
本發(fā)明所要解決的技術問題在于克服現(xiàn)有技術的不足,提供一種多語言開發(fā)系統(tǒng)中實現(xiàn)不同語言間數(shù)據(jù)通信的方法,該方法通用性強,可實現(xiàn)不同語言之間的數(shù)據(jù)通信、參數(shù)傳遞,不同語言代碼將完全獨立編寫,功能獨立實現(xiàn),數(shù)據(jù)通信、參數(shù)傳遞過程簡單、通信效率高,程序間耦合度低,同時程序開發(fā)高效率。本發(fā)明具體采用以下技術方案解決上述技術問題。多語言開發(fā)系統(tǒng)中實現(xiàn)不同語言間數(shù)據(jù)通信的方法,在需要數(shù)據(jù)通信的第一語言應用部分和第二語言應用部分之間設置一接口模塊;所述接口模塊包括與第一語言應用部分連接的第一語言代理,以及與第二語言應用部分連接的第二語言代理,第一語言代理與第二語言代理連接;第一語言代理負責將第一語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第二語言代理,以及將第二語言代理傳輸?shù)淖止?jié)序轉換為第一語言;第二語言代理負責將第二語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第一語言代理,以及將第一語言代理傳輸?shù)淖止?jié)序轉換為第二語言。根據(jù)本發(fā)明的發(fā)明思路,還可得到一種多語言開發(fā)系統(tǒng),包括至少兩種利用不同語言開發(fā)的應用部分,在需要數(shù)據(jù)通信的每兩種語言應用部分第一語言應用部分和第二語言應用部分,之間設置有一接口模塊;所述接口模塊包括與第一語言應用部分連接的第一語言代理,以及與第二語言應用部分連接的第二語言代理,第一語言代理與第二語言代理連接;第一語言代理負責將第一語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第二語言代理,以及將第二語言代理傳輸?shù)淖止?jié)序轉換為第一語言;第二語言代理負責將第二語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第一語言代理,以及將第一語言代理傳輸?shù)淖止?jié)序轉換為第二語言。相比現(xiàn)有技術,本發(fā)明具有以下有益效果
采用本發(fā)明方法,系統(tǒng)中各應用部分將能夠采用最合適的語言獨立地進行開發(fā)與設計,系統(tǒng)結構邏輯清晰,使用難度?。惶岣吡嘶诓煌Z言嵌套開發(fā)項目的開發(fā)效率,降低系統(tǒng)開發(fā)周期、開發(fā)成本以及系統(tǒng)維護成本,大大減少了系統(tǒng)失敗風險,同時程序間耦合度顯著降低。
圖I為本發(fā)明方法的原理示意圖;
圖2為JAVA應用和C++應用之間的通信協(xié)作 圖3為JAVA到C++的通信流程 圖4為C++到JAVA的通信流程圖。
具體實施例方式下面結合附圖對本發(fā)明的技術方案進行詳細說明
本發(fā)明的原理如圖I所示,在需要數(shù)據(jù)通信的第一語言應用部分和第二語言應用部分之間設置一接口模塊;所述接口模塊包括與第一語言應用部分連接的第一語言代理,以及與第二語言應用部分連接的第二語言代理,第一語言代理與第二語言代理連接;第一語言代理負責將第一語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第二語言代理,以及將第二語言代理傳輸?shù)淖止?jié)序轉換為第一語言;第二語言代理負責將第二語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第一語言代理,以及將第一語言代理傳輸?shù)淖止?jié)序轉換為第二語言。本發(fā)明的技術方案具有通用性,適用于任意兩種不同語言之間的通信。為了便于公眾理解,下面以較常見的JAVA應用和C++應用之間的通信為例,來對本發(fā)明的技術方案進行詳細說明。接口模塊是本發(fā)明的關鍵,本實施例中的接口模塊由兩部分組成,其一為JAVA接口代理,主要負責1,把JAVA實例變量轉換為字節(jié)序并傳給C++代理;2,把C++傳過來的字節(jié)序轉換為java需要的類實例,并把實例傳給JAVA應用;其二為C++接口代理,主要負責1,把C++結構變量轉換為字節(jié)序并傳遞給JAVA代理;2,把JAVA應用傳過來的字節(jié)序轉換C++實例,并通過調用C++函數(shù)把轉換的結果傳給C++應用部分。在java應用部分與C++應用部分進行通信時,java與C++之間不傳遞對應的數(shù)據(jù)類型,而是在java應用部分與C++應用部分之間增加一個通信接口,對java應用部分與C++應用部分的通信數(shù)據(jù)進行轉換,所有復雜通信都用字節(jié)序進行傳遞,即通信傳輸?shù)膮?shù)只用一種數(shù)據(jù)類型,即字節(jié)數(shù)組或指針進行數(shù)據(jù)通信。針對JAVA應用到C++的通信,通信接口的JAVA代理部分把java復雜的類實例變量轉換為字節(jié)數(shù)組,并把轉換結果傳給C++代理部分,C++代理部分對收到的來自于JAVA的字節(jié)序進行轉換,轉換為對應的C++數(shù)據(jù)類型,然后直接調用C++類庫提供的接口函數(shù);針對C++到JAVA的通信,通信接口的C++代理部分把C++實例變量轉換為字節(jié)序,并把結果傳給JAVA代理部分,JAVA代理部分把來源于C++應用部分的字節(jié)序轉換為對應的JAVA類,并調用JAVA接口。JAVA應用與C++應用之間的數(shù)據(jù)通信原理如圖2所不,圖3、圖4分別顯不了 JAVA到C++、C++到JAVA的通彳目流程。整個過程可以通過如下實例進行詳細表述。假設在JAVA應用部分存在一個傳輸通信數(shù)據(jù)的JAVA類InfoPack,在C++應用部分存在一個對應的結構TInfoPack—T,接口的java代理部分實現(xiàn)方法的詳細描述如下InfoPack類
public class InfoPack implements Serializable
{
public byte口 getObjectBytes(){
TLangAdaptor adaptor = new TLangAdaptor (); adaptor. setPlatform(xuf—platform); adaptor. setPackNumber(xuf—packNumber); adaptor. setBitOrder(bit—order); adaptor, add(wSeqNo, 〃int〃); adaptor, add(wPackNum, 〃int〃); adaptor, add(wPackLen,〃int〃); for (xuf—0=0;xuf_0<1024;xuf—0++)
adaptor, add (tData[xuf_0], 〃char〃);return adaptor. getObjectBytes();
};
public void parse (byte xuf—input口,int xuf—index) {
TLangAdaptor adaptor = new TLangAdaptor();
adaptor. setPlatform(xuf—platform);
adaptor. setPackNumber(xuf—packNumber);
adaptor. setBitOrder(bit—order);
xuf—index = xuf_index+0;//the packed bytes
wSeqNo = adaptor, getint (xuf—input,〃int〃,xuf—index);
xuf—index = xuf—index+4;
xuf—index = xuf_index+0;//the packed bytes wPackNum = adaptor, getint(xuf—input,〃int〃,xuf—index); xuf—index = xuf—index+4;
xuf—index = xuf_index+0;//the packed bytes wPackLen = adaptor, getint(xuf—input,〃int〃,xuf—index); xuf—index = xuf—index+4;
xuf—index = xuf—index + 0; //the packed bytes for(xuf—0=0;xuf—0〈1024;xuf—0++)
{
tData[xuf—0] = adaptor, getbyte(xuf—input,〃char〃,xuf—index); xuf—index = xuf—index+1;}
};
public int wSeqNo;
public int wPackNum;
public int wPackLen;
public byte tData口 = new byte[1024];
}
TInfoPack—T 結構 typedef struct
{
int wSeqNo; int wPackNum; int wPackLen; char tData[1024];
}TInfoPack—T;
這個類由4個屬性與2個主要方法構成,在getOb jectBytes方法中,把InfoPack類的3個整形變量以及一個字節(jié)數(shù)組解析成一個完整而有序的字節(jié)數(shù)組,然后把轉換的字節(jié)數(shù)組通過內存拷貝的方法直接轉換為TInfoPack—T結構的一個實例,接著調用C++應用提供的API,把這個結構的實例傳遞給C++應用部分,這樣就完成了 JAVA應用部分到C++應用部分的參數(shù)傳遞、數(shù)據(jù)傳輸過程。接口的C++代理部分實現(xiàn)方法的詳細描述如下
C++代理部分申明一個無符號指針pVoidPointMemory,并分配1036個字節(jié)的字節(jié)空間的內存給pVoidPointMemory,通過內存拷貝,把TInfoPack—T結構的實例拷貝給pVoidPointMemory變量,這樣pVoidPointMemory實際是一塊連續(xù)的字節(jié)數(shù)組, 把pVoidPointMemory對應的字節(jié)數(shù)組作為參數(shù),調用InfoPack類的parse方法,對pVoidPointMemory的字節(jié)數(shù)組按順序進行解析,把不同部分的字節(jié)數(shù)組分別解析而構成了3個整數(shù)和一個1024字節(jié)的字節(jié)數(shù)組,而讓InfoPack類的四個屬性獲得對應的值,這個過程就完成了 C++結構對應的數(shù)據(jù)到JAVA類對應的屬性值的轉換。
權利要求
1.多語言開發(fā)系統(tǒng)中實現(xiàn)不同語言間數(shù)據(jù)通信的方法,其特征在于,在需要數(shù)據(jù)通信的第一語言應用部分和第二語言應用部分之間設置一接口模塊;所述接口模塊包括與第一語言應用部分連接的第一語言代理,以及與第二語言應用部分連接的第二語言代理,第一語言代理與第二語言代理連接;第一語言代理負責將第一語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第二語言代理,以及將第二語言代理傳輸?shù)淖止?jié)序轉換為第一語言;第二語言代理負責將第二語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第一語言代理,以及將第一語言代理傳輸?shù)淖止?jié)序轉換為第二語言。
2.一種多語言開發(fā)系統(tǒng),包括至少兩種利用不同語言開發(fā)的應用部分,其特征在于,在需要數(shù)據(jù)通信的每兩種語言應用部分第一語言應用部分和第二語言應用部分,之間設置有一接口模塊;所述接口模塊包括與第一語言應用部分連接的第一語言代理,以及與第二語言應用部分連接的第二語言代理,第一語言代理與第二語言代理連接;第一語言代理負責將第一語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第二語言代理,以及將第二語言代理傳輸?shù)淖止?jié)序轉換為第一語言;第二語言代理負責將第二語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第一語言代理,以及將第一語言代理傳輸?shù)淖止?jié)序轉換為第二語言。
全文摘要
本發(fā)明公開了一種多語言開發(fā)系統(tǒng)中實現(xiàn)不同語言間數(shù)據(jù)通信的方法。在需要數(shù)據(jù)通信的第一語言應用部分和第二語言應用部分之間設置一接口模塊;所述接口模塊包括與第一語言應用部分連接的第一語言代理,以及與第二語言應用部分連接的第二語言代理,第一語言代理與第二語言代理連接;第一語言代理負責將第一語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第二語言代理,以及將第二語言代理傳輸?shù)淖止?jié)序轉換為第一語言;第二語言代理負責將第二語言應用部分的數(shù)據(jù)轉換為字節(jié)序并傳輸給第一語言代理,以及將第一語言代理傳輸?shù)淖止?jié)序轉換為第二語言。本發(fā)明還公開了一種多語言開發(fā)系統(tǒng)。本發(fā)明方法通用性強,數(shù)據(jù)通信過程簡單、通信效率高,程序間耦合度低。
文檔編號G06F9/54GK102662772SQ201210058379
公開日2012年9月12日 申請日期2012年3月8日 優(yōu)先權日2012年3月8日
發(fā)明者彭建華, 徐立中, 李明 申請人:河海大學