gpt4 book ai didi

java - 如何从java程序打印.exe printf()消息

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:11 25 4
gpt4 key购买 nike

我有一个应用程序在控制台中打印来自 Test.exe 的消息。我的 java 程序通过执行此 Test.exe 创建一个进程。该应用程序通过读取该进程的输入流来打印消息。

我面临的问题是,
我有两种情况:
1)当我双击 test.exe 时,每秒都会打印 messages("Printing : %d") 。
2)但是当我运行我的java应用程序时,在终止Test.exe之前,最后会打印整个消息(不是每秒)。
如果.exe有非常大的消息要打印,那么它将打印这些消息(我认为每当缓冲区变满时)并且将完成刷新。
但是我如何打印与第一种情况相同的消息。

任何人的帮助将不胜感激。 :)

这是此 Test.exe 的代码。

#include <stdio.h>
#include <windows.h>
void main(void)
{
int i=0;

while (1)
{
Sleep(500);
printf("\nPrinting : %d",i);
i++;
if (i==10)
//if(i==100)
{
return 0;
}
}
}

我的 Java 应用程序如下:

public class MainClass {
public static void main(String[] args) {

String str = "G:\\Charan\\Test\\Debug\\Test.exe";
try {
Process testProcess = Runtime.getRuntime().exec(str);

InputStream inputStream = new BufferedInputStream(
testProcess.getInputStream());
int read = 0;
byte[] bytes = new byte[1000];
String text;
while (read >= 0) {
if (inputStream.available() > 0 ) {
read = inputStream.read(bytes);
if (read > 0) {
text = new String(bytes, 0, read);
System.out.println(text);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

是否可以以相反的顺序。如果我从控制台输入一些文本,Java 应该读取该字符串并将其传递给 .exe(或 testProcess)。.exe 如何从 Java 程序扫描某些内容。

谁能帮帮我..

最佳答案

考虑到您正在尝试从该进程逐行打印标准输出,我将使用进程的输入流创建一个 BufferedReader 对象,并对其使用 readLine() 方法。您可以使用以下构造函数链获取 BufferedReader 对象:

BufferedReader testProcessReader = new BufferedReader(new InputStreamReader(testProcess.getInputStream()));

并逐行阅读:

String line;
while ((line = testProcessReader.readLine()) != null) {
System.out.println(line);
}

这里的假设是 Test.exe 正在刷新其输出,这是从 Java 端进行任何读取所需的。您可以在每次调用 printf() 之后调用 fflush(stdout) 刷新 C 的输出。

如果不刷新,数据仅存在于缓冲区中。在考虑性能时,这是一个权衡,您希望写入数据的频率与您希望保存的写入/刷新操作的数量。如果性能至关重要,您可以考虑寻找更有效的进程间通信机制来在进程之间传递数据而不是 stdout。由于您使用的是 Windows,因此第一步可能是查看 Microsoft IPC help page .

关于java - 如何从java程序打印.exe printf()消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9697381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com