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,由于这个方法功能比较单一,我们选取了后者。
以上就是小编今天的分享了,希望可以帮助到大家。