当前位置:科普知识站>IT科技>

c#调用java

IT科技 阅读(1.16W)

<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,由于这个方法功能比较单一,我们选取了后者。