[英]Java external Process error stream readLine() blocks intermittently
我正在使用外部Windows程序,該程序通過將新行反復推入錯誤流來更新其進度。
運行時,命令提示符如下所示:
10% done
10% done
11% done
等等。
因此,我在Java應用程序中成功捕獲了這一點:
Process process = Runtime.getRuntime().exec("my little command");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String s;
while((s = stdError.readLine())!=null)
{
System.out.println(s);
}
不幸的是,您可能已經猜到了,這里存在一些問題。 stdError.readLine()
阻塞直到錯誤流中有+-4000字節為止,然后才在快速掛起之前以快速會話的方式打印出每一行。
我試着改變BufferedReader
緩沖區的大小,並使用stdError.read(char [] cbuf, int off, int len)
的小長度,無濟於事。
如何解決這個懸而未決的問題?
提前致謝 :)
stdError.readLine()會阻塞,直到錯誤流中有+-4000字節為止
不,不是。 只要有一行要讀取,它就會返回。
發生的事情是源進程正在緩沖其輸出,顯然是分成4096字節的塊。 在Java端,您無能為力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.