过程输出太大

Process output is too big

我有一个 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

请注意,我不是该工具的第一个开发者,所以我很难回答 "Why are you using this" 或类似问题。

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

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

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

 cmd += " >> " + outputFileName;

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

希望这个回答有用。