仅当通过文件接收(非用户)输入时才执行的 Java 程序

标签 java c multithreading pipe simulated-annealing

作为我的研究项目的一部分,我编写了一个实现模拟退火的 Java 搜索程序。然而,这种搜索不仅仅发生在 Java 程序中,因为我应该使用另一个用 C 编写的程序来计算总体成本函数。所以基本上搜索例程将如下所示:

成本函数示例:最小化 {A + B} 其中表达式的第一部分 A 将在我的程序中完成,第二部分 B 将是从 C 程序计算的正则化项。我知道我必须这样做似乎很奇怪,但我没有时间/资源/适当的背景来重新实现该正则化程序作为我的 Java 程序的一部分。基本上我试图通过两部分搜索来搜索最佳值 vector 。

我希望从Java输出当前的解决方案(作为C程序可以理解的格式化文件)并将其提供给C程序进行正则化(我已经完成了这部分)。这就是我陷入困境的地方:当 C 程序运行时,我希望让我的 Java 程序等待,直到它接收到从 C 程序返回的输入(以文件形式)。因此,基本上我的程序向另一个程序提供输入,然后停止其执行(暂时),直到该 C 程序完成其工作并返回一个值文件,以便重新计算在下一次退火迭代中使用的值搜索。

我猜我应该使用某种线程方法,例如等待和通知,但我真的不确定。如果程序依赖于用户输入,那就非常简单了。但就目前而言,该程序仅在接收到文件输入后才执行。

请多多指教!如果这个问题冗长且令人困惑,我提前表示歉意。我愿意澄清任何问题。谢谢。

最佳答案

基本上是这样的:

java runtime.getruntime() getting output from executing a command line program

当您准备好 C 部分时,您可以通过 Runtime.exec() 生成 Process,打开输入和输出流,以它识别的格式输入数据,然后从中读回最终结果输出流并解析它。

关于仅当通过文件接收(非用户)输入时才执行的 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19743655/

相关文章:

java - GWT doGet() servlet 将图像字节数组或图像返回给客户端

java - 包依赖

c++ - 将未初始化的变量传递给 srand 是个好主意吗?

java - LinkedBlockingQueue挂起的InputStream的自定义实现

java - 将无符号 32 位整数拆分为两个可重建的 16 位数字

java - Swagger API 文档通过@ApiResponse 与映射作为responseContainer 不起作用

c - 使用二进制信号量实现通用信号量

c - 如何配置 git 以忽略文件?

python - 多进程程序中线程与进程的关系

android - 无法修复 Android 中的 future 任务异常