c#調(diào)用java是什么,讓我們一起了解一下?
首先我們要知道,c#是什么?C#是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\(yùn)行于.NET Framework和.NET Core(完全開(kāi)源,跨平臺(tái))之上的高級(jí)程序設(shè)計(jì)語(yǔ)言。
那么我們?nèi)绾斡胏#調(diào)用java,來(lái)完成我們的工作?
IKVM.NET是一個(gè)針對(duì)Mono和微軟.net框架的java實(shí)現(xiàn),其設(shè)計(jì)目的是在.NET平臺(tái)上運(yùn)行java程序。它包含了以下的組件:用.NET實(shí)現(xiàn)的java虛擬機(jī),java類庫(kù)的.NET實(shí)現(xiàn),致力于在java和.NET之間交互的工具。
我們有一個(gè)JAVA寫(xiě)好的Demo,傳的參數(shù)是用Gzip進(jìn)行壓縮傳到服務(wù)器的,代碼如下:
package?Demo; import?java.io.BufferedReader; import?java.io.ByteArrayInputstream;?import?java.io.ByteArrayoutputstream;?import?java.io.IOException:?import?javaio.Inputstream import?java.io.InputstreamReader;?import?java.io.objectInputStream;?import?java.io.0bjectoutputstream; import?java.util.zip.GZIPInputstream;?import?java.util.zipGZIPOutputStream; import?org.apache.commons.httpclient.HttpClient; import?org.apache.commons.httpclient.methods.PostMethod: import?org.apache.commons.httpclient.params.HttpClientParams;?import?com.google.gson.Gsonj public?class?Demo{ public?static?string?dopostClient(string?json,?string?url){ HttpClient?httpClient?=new?HttpClient();?String?rval?=""; PostMethod?postMethod?=new?PostMethod(url);?try{ Gson?gson?=new?Gson(); Inputstream?in?=new?ByteArrayInputstream(objectToByte(json));?postMethod.setRequestBody(in); HttpClientParams?params?=new?HttpClientParams();?httpClient.setParams(params); httpClient.executeMethod(postMethod); byte[1?b=postMethod.getResponseBody();?String?rtnData?=(String)byteTo0bject(b);?rval=gson.toJson(rtnData);}?catch(Exception?e){ rval="erro:"+e.getMessage();}?finally postMethod.releaseConnection() return?rval;} public?static?byte[]?objectToByte(javalang.0bject?obj){ byte[]?bytes?=?null; Objectoutputstream?oo?=?hull;?try{ ByteArrayOutputStream?out=newByteArrayOutputstream();?GZIPOutputStream?gzip?=newGZIPOutputStream(out);?gzip.write(obj.toString()getBytes("utf-8"));?gzip.close(); bytes=out.toByteArray(); }catch(Exception?e) e.printstackTrace();}finally{ if(oo?!=?null){ try{ oo.close(); }catch(IOExceptione){ e.printstackTrace();} return?bytes; private?static?java.lang.Object?byteToobject(byte[]?bytes){ String?obj?=""; ObjectInputstream?oi?=null;?try{ ByteArrayInputstream?bi?=?new?ByteArrayInputstream(bytes);?GZIPInputstream?gzipi=new?GZIPInputstream(bi); BufferedReader?bufferedReader?=?new?BufferedReader(new?InoutStreamReader(azipi."UTF-8"))?String?line; while((line?=bufferedReader.readLine())!=null) { obj+=line;} }?catch(Exception?e){ e.printStackTrace();}finally{ if(oi?!=?null) { try oi.close(); }catch(I0Exception?e) e.printstackTrace(); } } return?obj;} }
這個(gè)代碼我用C#改寫(xiě)了,用HttpWebRequest的方式傳到服務(wù)器,服務(wù)器那邊Gzip解壓不了,查了原因是因?yàn)镴ava與C#的Byte類型值范圍不同,我們有兩種解決思路,一種是將這個(gè)JAVA做成webservice掛在服務(wù)器上,c#再去調(diào)用。第二種就是將這個(gè)方法編譯成可由C#直接調(diào)用的DLL,由于這個(gè)方法功能比較單一,我們選取了后者。
以上就是小編今天的分享了,希望可以幫助到大家。