
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,由于這個方法功能比較單一,我們選取了后者。
以上就是小編今天的分享了,希望可以幫助到大家。
