好的,还在研究一个科学项目,该项目涉及使用不同语言测试通过互联网发送数据的速度。我的老师似乎认为这不够困难,并希望我运行一个主要的Java程序来控制客户。
我已经想出了如何运行外部文件(但文件名中的空格仍有问题),并且很好。我的麻烦是我需要以某种方式与已打开的客户端(我有Python,C,C ++,Java和Ruby客户端)进行测试次数,并且我需要获取通过测试获得的数据集。 / p>
最后,我需要了解如何从java发送输入到Python,C,C ++,Java和Ruby脚本并收集它们的输出以放入java。作为最后的手段,我可能有一个文本文件充当主java程序和每个客户端之间的中介。这不是一个非常优雅的解决方案,所以我宁愿避免它。
答案 0 :(得分:1)
您可能正在寻找JNI - Java Native Interface。 JNI肯定会满足老师对困难的要求。 JNI允许Java代码在其他语言中调用代码并获得响应,就像调用Java方法一样。我在JNI中遇到的最大问题是本机(C,C ++等)代码中的崩溃也会导致Java程序崩溃。 JNI将为您的应用程序创建当前的外部脚本内部代码,并且可能比您需要的更难。
对于更简单的解决方案,您可能希望查看Java中的ProcessBuilder类。例如:
ProcessBuilder pb = new ProcessBuilder("myshellScript.sh", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory("myDir");
Process p = pb.start();
InputStream is = p.getInputStream();
// use process p's input stream is to provide input to your process here
OutputStream os = p.getOutputStream();
// use process p's output stream to get the results here
答案 1 :(得分:0)
您可以考虑使用某些跨语言API在每个Java,C / C ++,Ruby和Python的运行实例之间发送消息。
它比使用文本文件作为中介要复杂一些,但可能更具性能和可扩展性。
//尼古拉斯