gpt4 book ai didi

java - 尝试读取进程输入流

转载 作者:行者123 更新时间:2023-12-01 15:00:51 25 4
gpt4 key购买 nike

在下面的场景中,我们正在处理一个控制台应用程序,其中有一个 PHP 脚本作为 Java 应用程序中的进程运行。每次脚本都会输入两个值并返回“OK”或“ERR”。我试图捕获将输入输入脚本所需的时间以及返回“OK”或“ERR”值的时间。

我已经实现了以下修复,但它似乎仍然不起作用。如果有人能提供一些线索。

try {
proc = runtime.exec("php " + "script.php");


inp = new BufferedReader( new InputStreamReader(proc.getInputStream()) );
out = new BufferedWriter( new OutputStreamWriter(proc.getOutputStream()) );

while (true) {
temp = getRandomUser() + " " + getRandomHost();
startTime = System.currentTimeMillis();
//System.out.println(temp);

print(pipe(temp));

while (!inp.readLine().equals("ERR") || !inp.readLine().equals("OK")) {
}

endTime = System.currentTimeMillis();
procTime = (long) endTime - startTime;

fout.write(Double.toString(procTime));
fout.newLine();
//System.out.println("! " + procTime);
}


} catch (IOException ex) {
System.out.println("Thread prematurely Terminated...");
}

最佳答案

您对症状的描述不清楚。然而,这种说法几乎肯定是错误的:

while (!inp.readLine().equals("ERR") || !inp.readLine().equals("OK")) {
}

首先,如果到达流的末尾,readLine 将返回 null,当您尝试对其调用 equals 时,您将得到一个 NPE。

其次,条件实际上是调用 readLine() 两次。看起来您的意图是阅读并丢弃行,直到得到与“ERR”或“OK”匹配的行。但代码并没有这样做。事实上,如果它读取的第一行是“OK”,则条件不会触发......并且您将继续尝试阅读。代码应该是这样的:

String line = inp.readLine();
while (line != null && !line.equals("ERR") && !line.equals("OK")) {
line = inp.readLine();
}

这个错误当然足以解释为什么代码会阻塞......

关于java - 尝试读取进程输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13676497/

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