3

我有一个用 C# 编写的程序,它从第三方服务器接收数据并将其处理成一系列整数(它们正在快速流式传输)。该程序是用 C# 编写的,因为第三方提供了类来处理数据,但仅在 C# 中提供它们。我想获取这些整数并在 Java 程序中以流的方式使用它们(因此,一旦它们被 C# 程序流式处理和处理,我想在 Java 程序中使用整数)。第二个程序是用 Java 编写的,因为另一个第三方只用 Java 提供他们的类(这是必需的)。所以我的猜测是——

  1. 寻找一个在 Java 中运行 C# 类的程序,然后将处理传入数据的 C# 类直接包含到我的 Java 程序中 [这似乎不太有希望 - 我似乎无法获得 jni4net,这是在其他职位,工作]

或者

  1. 用 C# 编写另一个程序,将正在处理的整数保存到特定的内存位置。编译程序。然后从 Java 源代码中运行可执行文件,并在 Java 代码中编写某种回调,当特定内存位置的整数发生更改时,该回调会拾取并记录这些新数字是什么[不知道如何开始! ]

有没有人对什么可能是最不痛苦的方法有任何建议?

4

3 回答 3

3

听起来您想要某种形式的进程间通信机制。

因此,可以采用任何允许通信的方式:

  1. 命名管道
  2. 插座
  3. TCP 连接
  4. 共享内存

在这些选项中,我会推荐命名管道,因为它们最容易掌握并且没有端口不可用等问题。

请参阅:如何从 Java 打开 Windows 命名管道?

并且:在 C# 中为 IPC 使用命名管道

这篇文章:使用命名管道在 C# 和 Java 之间进行通信描述了在两种环境中使用管道的端到端方式。

于 2013-04-05T16:58:43.493 回答
0

过去我必须做类似的事情才能将数据从 Java 系统获取到 Excel(通过 RTD API),并最终使用套接字协议方法。

如果您有一个非常简单的数据集(如您上面提到的整数流),这应该非常简单 - 只需查看 Java Socket 和 ServerSocket 类的文档,以及相应的 C# Socket 类。

如果你最终得到一个更复杂的 API,包含多条消息等,你可能想看看 Google 协议缓冲区,因为周围有 .Net 和 Java 实现。

于 2013-04-05T17:27:02.637 回答
0

您可以将 Java 和 C# 程序合并为一个,并使用 JNI 桥接 C#/Java 接口。JNI 基本上允许您从 Java 调用 C# 方法,反之亦然。我想这将同样难以编码为套接字,而且会有一些加速。

更多信息在这里: http: //www.codeproject.com/Articles/245622/Using-the-Java-Native-Interface-in-Csharp

于 2013-04-05T17:03:21.420 回答