IT科技

當前位置 /首頁/IT科技 > /列表

c#調用java

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

c#調用java是什麼,讓我們一起了解一下?

首先我們要知道,c#是什麼?C#是微軟公司發佈的一種面向對象的、運行於.NET Framework和.NET Core(完全開源,跨平台)之上的高級程序設計語言

那麼我們如何用c#調用java,來完成我們的工作?

IKVM.NET是一個針對Mono和微軟.net框架的java實現,其設計目的是在.NET平台上運行java程序。它包含了以下的組件:用.NET實現的java虛擬機,java類庫的.NET實現,致力於在java和.NET之間交互的工具。

c#調用java

我們有一個JAVA寫好的Demo,傳的參數是用Gzip進行壓縮傳到服務器的,代碼如下:

package Demo;import java.io.BufferedReader;import java.io.ByteArrayInputstream; import java.io.ByteArrayoutputstream; import java.io.IOException: import javaio.Inputstreamimport 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.Gsonjpublic 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();} finallypostMethod.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){tryoi.close();}catch(I0Exception e)e.printstackTrace();}}return obj;}}

這個代碼我用C#改寫了,用HttpWebRequest的方式傳到服務器,服務器那邊Gzip解壓不了,查了原因是因為Java與C#的Byte類型值範圍不同,我們有兩種解決思路,一種是將這個JAVA做成webservice掛在服務器上,c#再去調用。第二種就是將這個方法編譯成可由C#直接調用的DLL,由於這個方法功能比較單一,我們選取了後者。

TAG標籤:調用 java #