c#調用java是什么,讓我們一起了解一下?
首先我們要知道,c#是什么?C#是微軟公司發布的一種面向對象的、運行于.NET Framework和.NET Core(完全開源,跨平臺)之上的高級程序設計語言。
那么我們如何用c#調用java,來完成我們的工作?
IKVM.NET是一個針對Mono和微軟.net框架的java實現,其設計目的是在.NET平臺上運行java程序。它包含了以下的組件:用.NET實現的java虛擬機,java類庫的.NET實現,致力于在java和.NET之間交互的工具。
我們有一個JAVA寫好的Demo,傳的參數是用Gzip進行壓縮傳到服務器的,代碼如下:
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;} }
這個代碼我用C#改寫了,用HttpWebRequest的方式傳到服務器,服務器那邊Gzip解壓不了,查了原因是因為Java與C#的Byte類型值范圍不同,我們有兩種解決思路,一種是將這個JAVA做成webservice掛在服務器上,c#再去調用。第二種就是將這個方法編譯成可由C#直接調用的DLL,由于這個方法功能比較單一,我們選取了后者。
以上就是小編今天的分享了,希望可以幫助到大家。