c#调用java

如题所述

第1个回答  2022-10-18
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,由于这个方法功能比较单一,我们选取了后者。
相似回答