来自Java的慢速系统命令

时间:2015-02-25 18:07:00

标签: java bash runtime.exec

我从Java调用bash脚本脚本。 该脚本执行以下操作:

cat /home/user/Downloads/bigtextfile.txt | grep 'hello'

运行命令行时,此特定命令大约需要1秒才能完成150MB的文本文件。

使用以下调用通过Java调用bash脚本时:

command = "sh /home/user/bashfiletocall"
p = Runtime.getRuntime().exec(command);

完成的时间需要很长时间,我不等待。

我做错了什么,如果没有,你能解释性能严重不足的原因吗?

注意:我在Netbeans中运行它,这似乎是问题..当我运行文件命令行时它很快。 netbeans和命令行执行之间的性能是巨大的。

非常感谢。

private String executeCommand(String command) {     
    StringBuilder output = new StringBuilder();
    BufferedReader reader = null;
    Process p;
   try {
    p = Runtime.getRuntime().exec(command);
    p.waitFor();

  reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

    String line = "";           
    while ((line = reader.readLine())!= null) {
        output.append(line + "\n");
    }                    

} catch (Exception e) {
    e.printStackTrace();
}             
return output.toString();
}

1 个答案:

答案 0 :(得分:2)

开始您的过程后,您需要从输入流开始阅读。否则缓冲区正在运行,p.waitFor()将永远等待。

Process类的Javadoc:

  

由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此无法及时写入输入流或读取子进程的输出流可能导致子进程阻塞甚至死锁。