Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C语言编写的程序中获取数据到Java程序中_Java_C#_Executable_Code Translation - Fatal编程技术网

从C语言编写的程序中获取数据到Java程序中

从C语言编写的程序中获取数据到Java程序中,java,c#,executable,code-translation,Java,C#,Executable,Code Translation,我有一个用C#编写的程序,它从第三方服务器接收数据并将其处理成一系列整数(它们正在快速流式传输)。该程序是用C语言编写的,因为第三方提供类来处理数据,但只提供C语言。我希望将这些整数以流式方式在Java程序中使用(因此,一旦C#程序对它们进行流式处理,我希望在Java程序中使用整数)。第二个程序是用Java编写的,因为另一个第三方只用Java提供它们的类(这是必需的)。所以我的猜测是- 寻找一个在Java中运行C#类的程序,然后将处理传入数据的C#类直接包含到我的Java程序中[这似乎不太有希望

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

  • 寻找一个在Java中运行C#类的程序,然后将处理传入数据的C#类直接包含到我的Java程序中[这似乎不太有希望-我似乎无法让jni4net工作,这是在其他帖子中建议的]
  • 用C#编写另一个程序,将正在处理的整数保存到特定的内存位置。编译程序。然后从Java源代码中运行可执行文件,并在Java代码中编写某种回调函数,当特定内存位置的整数发生更改时,这些回调函数将拾取并记录这些新数字[不确定如何开始!]

  • 有人对什么可能是最不痛苦的方法有什么建议吗?

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

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

  • 命名管道
  • 插座
  • TCP连接
  • 共享内存
  • 在这些选项中,我建议使用命名管道,因为它们最容易掌握,并且没有端口不可用等问题

    见:

    以及:


    这篇文章:介绍如何使用这两种环境中的管道以及端到端的方法。

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


    这里有更多信息:

    我过去也做过类似的事情,以便将Java系统中的数据(通过RTDAPI)导入Excel,最终采用套接字协议方法

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


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

    检查一下:为什么需要这样做?是否有某种超出您控制范围的需求迫使您使用两种不同的语言,或者这两种应用程序或多或少都已经存在?只需在java和C#应用程序之间创建一个命名管道即可。听起来最适合你的情况。在一般情况下,只需查找“进程间通信”。程序之间有许多与语言无关的通信方式。@ConradClark Sockets可能不是最简单的方法,尽管它是一种可能的选择。Sam-我没有选择使用这两种语言。不幸的是,我正在尝试处理数据,这些数据要求编译类只在Java中使用,只在C#中使用。谢谢你们的回复-我可能需要一些时间来浏览你们的建议,因为我不熟悉IPC,但一旦我找到了一个可行的解决方案,我会向你们汇报!这不仅比其他方法更难,而且我认为这不是一个好的设计。这里我们有两个逻辑上独立的程序需要通信。他们可以通过一些IPC方法通过操作系统进行通信,从而减少耦合,而不是让他们相互了解并以这种方式紧密耦合在一起。