簡體   English   中英

BufferedReader.readline()掛起

[英]BufferedReader.readline() hangs

我正在嘗試用我的程序運行/usr/bin/perl -e 'for(my $i=0;$i<1000;$i++){print 1x1000;print STDERR 2x1000;}' (在終端中工作) 。

ProcessBuilder pb = new ProcessBuilder(go); //go is the command
process = pb.start();
BufferedReader incommandbuf = new BufferedReader(new InputStreamReader(process.getInputStream()),1024*1000);
BufferedReader errcommandbuf = new BufferedReader(new InputStreamReader(process.getErrorStream()),1024*1000);
stdString = "";

while ((line = incommandbuf.readLine()) != null)
{
    stdString += line + "\n";
}
String errorstrtemp = "";
while ((line = errcommandbuf.readLine()) != null)
{
    errorstrtemp += line + "\n";
}

如果我嘗試運行此程序,則它會在while ((line = incommandbuf.readLine()) != null)時掛起。 如果我將命令更改為/usr/bin/perl -e 'for(my $i=0;$i<64;$i++){print 1x1000;print STDERR 2x1000;}' 如果上升到65或更高,則不起作用。 起初,我以為我只需要更改BufferedReaders的大小即可,但無濟於事。 關於什么原因的任何線索? 如果需要,我將提供任何其他信息。 謝謝。

您一次正在讀取一個流。 當另一個流填滿緩沖區時,您的進程將停止等待您讀取它。 解決方案是讀取不同線程中的流或使用ProcessBuilder.redirectErrorStream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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