2

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

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

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

4

3 回答 3

1

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

于 2014-05-23T00:32:15.380 回答
0

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

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

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

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

于 2014-05-23T00:02:40.863 回答
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

于 2014-05-22T23:23:46.097 回答