从用 C# 编写的程序中获取数据到 Java 程序中

Posted

技术标签:

【中文标题】从用 C# 编写的程序中获取数据到 Java 程序中【英文标题】:Getting data from an program written in C# into a Java program 【发布时间】:2013-04-05 16:53:28 【问题描述】:

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

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

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

对于最不痛苦的方法,有人有什么建议吗?

【问题讨论】:

看看这个:***.com/questions/14824491/… 为什么需要这样做?是否有某种超出您控制范围的要求迫使您使用 2 种不同的语言,或者这两种应用程序或多或少已经存在? 只需在 java 和 C# 应用程序之间创建一个命名管道。听起来最适合您的情况。在一般情况下,只需查找“进程间通信”即可。程序之间有许多与语言无关的通信方式。 @ConradClark 套接字可能不是最简单的方法,尽管它是一种可能的选择。 Sam - 不幸的是,我对使用这两种语言别无选择,我正在尝试处理需要专门在 Java 和 C# 中编译的类的数据。感谢你们的回复 - 由于我不熟悉 IPC,因此可能需要一些时间来查看您的建议,但一旦找到可行的解决方案,我会报告! 【参考方案1】:

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

因此,任何允许交流的东西都可以使用:

    命名管道 套接字 TCP 连接 共享内存

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

见:How to open a Windows named pipe from Java?

还有:Using Named Pipes for IPC in C#

这篇文章:Using Named Pipes to communicate between C# and Java 描述了在两种环境中使用管道的端到端方式。

【讨论】:

【参考方案2】:

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

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

【讨论】:

这不仅比其他一些方法更难,而且我认为这不是好的设计。这里我们有两个逻辑上独立的程序需要通信。与其让它们彼此了解并以这种方式将它们紧密耦合在一起,它们可以通过某种 IPC 方法通过操作系统进行通信,从而减少耦合。【参考方案3】:

过去,为了将 Java 系统中的数据导入 Excel(通过 RTD API),我不得不做类似的事情,最后我选择了套接字协议方法。

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

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

【讨论】:

以上是关于从用 C# 编写的程序中获取数据到 Java 程序中的主要内容,如果未能解决你的问题,请参考以下文章

如何从用 C# 编写的抽象基类继承

无法从用 Tcl 编写的应用程序中找到包

如何从用 Swift 编写的 Flutter 平台特定代码启动 ViewController?

如何从用 MFC (MSVC 2008) 编写的应用程序查询基于 CGI 的网络服务器并处理结果?

从用 mysql 5.5 编写的数据库迁移到用 mysql 5.0 编写的数据库

如何从用java编写的查询中将虚线字符串传递给oracle