是的,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并获取返回结果。