java - BufferedReader readLine() 方法花费了很多时间

标签 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 分钟非常慢。有哪些可能的选择?这取决于我使用的流程吗?请帮助我。

最佳答案

重要的不是阅读,而是写作。 BufferedReader 的运行速度不能比生成输出的速度快。如果没有什么可读的,它就会阻塞。你看错了方向。

NB 你的循环基本上是毫无意义的,或者充其量是非常奇怪的。您正在阅读该过程产生的每一行,并丢弃除最后一行之外的所有内容。您确实应该对每一行都做一些事情吗?

关于java - BufferedReader readLine() 方法花费了很多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093485/

相关文章:

java - 在 Android 中创建硬链接(hard link)和符号链接(symbolic link)

c - 在对快照进行进程遍历后,如何获得所有进程的完整命令行?

java - 如何在 Java 中删除文本文件的最后一行?

java - 让 FileReader 使用循环读取每四行

Java Tic Tac Toe 检查获胜者方法不能一起工作

java - 如何使用 JNI,但仅适用于当前平台?

java - Liquibase 错误 [Postgresql] : unterminated dollar-quoted string at or near "$BODY$

c# - Process.RedirectStandardOutput 不起作用

c++ - 运行 Windows 程序并检测它何时以 C++ 结束

java - 当第二个对象调用此方法获取输入数据时流关闭