如何将Java程序集成到c#编写的项目中?

本文关键字:项目 Java 程序 集成 程序集 | 更新日期: 2023-09-27 18:04:38

我听说Reddit和Facebook已经用C/c++编写了他们应用程序的某些部分,以加快运行时间。然而,据我所知,主要的平台是用其他语言编写的。他们如何让这些程序协同工作?

我最近用Java写了一个程序,允许我从RESTful资源中推/拉数据。一位同事现在要求我在他的电脑上安装。不幸的是,他的应用程序是用c# .net编写的,而我不懂c#,我也不想重写我的代码。是否有可能简单地创建某种包装器/垫集成两个系统在一起,即主要的c#程序请求某种类型的数据文件/对象从我的Java程序?

还有,简单地学习如何用c#重写程序是不是更合理?

如何将Java程序集成到c#编写的项目中?

实际上有一个优秀的开源项目,用于从。net语言中使用Java字节码。它叫IKVM。您可以动态地解释Java .class文件,也可以先将Java字节码"编译"为。net字节码,生成。net程序集,然后将其与一些IKVM DLL一起使用。我已经成功地使用预编译选项将一个大型Java计算几何库(JTS)合并到c#应用程序中。

c#和Java在很多方面并没有太大的不同,所以移植你的应用程序可能不是一项艰巨的任务(当然,这取决于各种因素)。因为它们都是托管语言,所以当调用c#代码而不是本机Java时,我不会期望看到性能的提高。

但是,您可能会发现这个链接很有用:http://codefry.blogspot.co.uk/2012/01/calling-net-dlls-from-java-code-without.html?m=1#!/2012/01/calling-net-dlls-from-java-code-without.html

c#和Java都是解释语言和编译语言的混合体。Java被编译为Java字节码,JVM运行时将其解释为本机指令。c#是用MSIL(微软中间语言)编译的,. net运行时将MSIL解释为本地指令。c#和Java都有直接与本地二进制文件交互的方法。Java有Java本机接口(Java Native Interface, JNI),虽然。net没有专门的名称,但。net应用程序也可以与本机程序集交互。由于C和c++编译为本机程序集,因此可以将Java或. net代码与C和c++代码生成的二进制代码进行接口。

根据我的经验,当您听说解释语言使用本机二进制文件时,通常有两个原因之一。第一个原因是因为本机二进制代码所做的事情非常复杂,解释器的低效率实际上会对性能产生很大影响。使用解释型语言仍然可以编写对性能要求不高的代码,而不会对整体性能产生明显影响,而且解释型语言所提供的东西可以加快开发速度并提高质量。(例如,大多数解释型语言自动进行内存管理。)另一个原因是重用。许多工具(如数据库驱动程序)以本机格式提供;与尝试用解释型语言重新实现所有代码相比,为本机二进制文件提供包装器是一种更简单、更便宜(而且可能更可靠)的选择。大多数解释型语言都提供本机接口,因为这些实践被广泛使用。

没有官方支持的方式来连接。net和Java代码。它们都是解释性语言,除了native之外,很难找到与任何类型的库接口的语言。

学习c#是否"太难"是一个完全主观的问题,在很大程度上取决于你目前的知识和经验,以及其他应用程序的范围和时间表。因此,我们不能为你回答这个问题。