是的,Java可以通过多种方式调用C#代码并获取返回结果。这里有两种常见的方法:
-
使用JNI(Java Native Interface): JNI允许Java代码与本地代码(如C和C++)进行交互。要使用JNI调用C#代码,您需要创建一个C# DLL,其中包含要从Java调用的函数。然后,您可以使用Java的
java.lang.System.loadLibrary()
方法加载此DLL,并使用JNI调用其中的函数。 -
使用REST API或gRPC: 另一种方法是在C#中创建一个Web服务(如REST API或gRPC),并在Java客户端中调用该服务。这种方法不需要直接调用C#代码,而是通过HTTP请求与C#服务进行通信。
以下是使用REST API的简单示例:
C#(C#服务端):
using System; using System.Web.Http; namespace CsharpWebService { [ApiController] [Route("api/[controller]")] public class HelloWorldController : ControllerBase { [HttpGet] public string Get() { return "Hello from C#!"; } } }
Java(Java客户端):
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class JavaClient { public static void main(String[] args) { try { String url = "http://localhost:5000/api/hello"; URL obj = new URL(url); HttpURLConnection connection = (HttpURLConnection) obj.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println("Response: " + response.toString()); } else { System.out.println("GET request failed"); } } catch (Exception e) { e.printStackTrace(); } } }
在这个示例中,C#服务端创建了一个简单的Web API,Java客户端通过HTTP请求调用该API并获取返回结果。