gpt4 book ai didi

java - 过程输出太大

转载 作者:搜寻专家 更新时间:2023-10-31 20:19:24 25 4
gpt4 key购买 nike

我有一个包含以下代码的 Java 工具:

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);

// any error message?
StreamGobblerLocal errorGobbler = new StreamGobblerLocal(proc.getErrorStream(), "ERROR");

// any output?
StreamGobblerLocal outputGobbler = new StreamGobblerLocal(proc.getInputStream(), "OUTPUT");

// kick them off
errorGobbler.start();
outputGobbler.start();

// any error???
int exitVal = proc.waitFor();
commandResultBean.setCLI_ReturnValue(exitVal);

它可以工作,但是当子进程的输出很大时,它就会死锁。我几乎可以肯定问题出在以下地方:

Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, or even deadlock.

我在这里找到它:http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html

我该如何解决这个问题?大输出就像记事本中的 30000 行,我必须记录这些行。

我的代码是从这篇文章中复制过来的,所以你可以在这里查看我没有复制的实现。

http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html

请注意,我不是该工具的第一个开发者,因此我很难回答“您为什么使用此工具”或类似问题。

感谢任何帮助,提前致谢。

最佳答案

一周后,我决定分享我在这种情况下所做的事情。更好的答案仍然值得赞赏。

这就像一种解决方法,但效果很好。您可以添加这一行:

 cmd += " >> " + outputFileName;

这样 Windows 上的 cmd 和 Mac 上的 bash(也是 Unix)将完成工作并跳过日志记录过程中的 java 部分。您还可以使用其他方法读回文件,该方法可以处理如此大量的数据,并在代码中的任何位置使用输出。

希望这个答案有用。

关于java - 过程输出太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28567801/

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