當前位置:生活全書館 >

IT科技

> c#呼叫java

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,由於這個方法功能比較單一,我們選取了後者。

標籤: 呼叫 java
  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/5wp3q9.html