从C语言编写的程序中获取数据到Java程序中
我有一个用C#编写的程序,它从第三方服务器接收数据并将其处理成一系列整数(它们正在快速流式传输)。该程序是用C语言编写的,因为第三方提供类来处理数据,但只提供C语言。我希望将这些整数以流式方式在Java程序中使用(因此,一旦C#程序对它们进行流式处理,我希望在Java程序中使用整数)。第二个程序是用Java编写的,因为另一个第三方只用Java提供它们的类(这是必需的)。所以我的猜测是-
- 寻找一个在Java中运行C#类的程序,然后将处理传入数据的C#类直接包含到我的Java程序中[这似乎不太有希望-我似乎无法让jni4net工作,这是在其他帖子中建议的]
或
- 用C#编写另一个程序,将正在处理的整数保存到特定的内存位置。编译程序。然后从Java源代码中运行可执行文件,并在Java代码中编写某种回调函数,当特定内存位置的整数发生更改时,这些回调函数将拾取并记录这些新数字[不确定如何开始!]李>
有没有人对最不痛苦的方法有什么建议
# 1 楼答案
在过去,为了将数据从Java系统(通过RTDAPI)导入Excel,我不得不做一些类似的事情,最后采用了套接字协议方法
如果你有一个非常简单的数据集(比如你上面提到的整数流),这应该非常简单——只需查看Java Socket和ServerSocket类的文档,以及相应的C#Socket类
如果你最终得到一个更复杂的API,包含多条消息等,你可能想看看Google协议缓冲区,因为两者都有。Net和Java实现
# 2 楼答案
您可以将Java和C#程序合并为一个程序,并使用JNI连接C#/Java接口。JNI基本上允许您从Java调用C#方法,反之亦然。我猜这将同样难以编码为套接字,而且会有一些加速
更多信息请点击这里:http://www.codeproject.com/Articles/245622/Using-the-Java-Native-Interface-in-Csharp
# 3 楼答案
听起来你想要某种形式的进程间通信机制
因此,任何允许沟通的东西都可以使用:
在这些选项中,我建议使用命名管道,因为它们最容易掌握,并且没有端口不可用等问题
见: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描述了从两种环境使用管道的方法和端到端的方法