簡體   English   中英

Java外部進程錯誤流readLine()間歇性地阻塞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM