BufferedReader readLine()方法需要花费很多时间

时间:2015-03-17 07:28:08

标签: java process bufferedreader

我从进程中获取InputStream并通过BufferedReader读取它。虽然在while循环中,br只有一行,但它花了将近1分钟。我通过打印前后检查了这一点,如下面的代码所示。

String[] sendCommand = { "/bin/bash", "/Users/apple/Downloads/yowsup-e56f2d28f38c7961a2ccf7df588462f1c9588edf/sendmessage.sh"};
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.directory(new File("/Users/apple/Downloads/yowsup-e56f2d28f38c7961a2ccf7df588462f1c9588edf"));
processBuilder.environment().put("PYTHONPATH", "/Users/apple/Downloads/yowsup-e56f2d28f38c7961a2ccf7df588462f1c9588edf");
processBuilder.command(sendCommand);

Process process = processBuilder.start();
process.waitFor();  
InputStream stream = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
String temp = null;
System.out.println("before");
long start_time = System.currentTimeMillis();
while ((temp = br.readLine()) != null) 
{
    str = temp;
}
long end_time = System.currentTimeMillis();
long time_taken = end_time-start_time;
System.out.println("after");
System.out.println("Time taken in while loop: "+time_taken/1000);

结果是:

before
after
Time taken in while loop: 67

我想改善所用的时间,因为1分钟非常慢。有哪些可能的选择?它取决于我使用的流程吗?请帮帮我。

1 个答案:

答案 0 :(得分:2)

这不是阅读,而是写作。 BufferedReader不能比产生输出更快。如果没有什么可读,它会阻止。你看错了。

注意你的循环基本没有意义,或者至多非常奇怪。你正在阅读这个过程所产生的每一条线,除了最后一条线外都扔掉了。当然你应该对每一行都做点什么?