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

时间:2014-05-22 23:17:50

标签: java c# polyglot

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

我最近用Java编写了一个程序,允许我从RESTful资源中推送/拉取数据。一位同事现在要求我实施他的。不幸的是,他的应用程序是用C#.net编写的,我不知道C#,也不想重写我的代码。是否可以简单地创建某种包装器/垫片来将两个系统集成在一起,即主C#程序从我的Java程序中请求某种数据文件/对象?

另外,简单地学习如何用C#重写程序会更合理吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

当您听到使用原生二进制文件的解释语言时,根据我的经验,这通常是出于两个原因之一。首先是因为原生二进制文件的功能足够复杂,以至于解释器的低效率实际上会在性能上产生很大的差异。较少的性能关键代码仍然可以用解释型语言编写,而不会对整体性能产生明显影响,而解释性语言可以帮助您加快开发速度并提高质量。 (例如,大多数解释型语言会自动执行内存管理。)另一个原因是重用。许多工具(例如数据库驱动程序)以本机格式提供;提供围绕本机二进制文件的包装器比尝试在解释语言中重新实现所有代码更简单,更便宜(并且可能更可靠)。大多数解释语言都提供本机接口,因为这些实践被广泛使用。

没有官方支持的.NET和Java代码接口方法。它们都是解释型语言,除了本地语言之外,很难找到与任何类型的库相连接的语言。

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