2012-11-08 5 views
2

내 프로그램에서 /usr/bin/perl -e 'for(my $i=0;$i<1000;$i++){print 1x1000;print STDERR 2x1000;}' (터미널에서 작동)을 실행하려고합니다.BufferedReader.readline()가 멈 춥니 다

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 이상으로 올라가면 작동하지 않습니다. 처음에는 BufferedReader의 크기를 변경해야한다고 생각했지만 도움이되지 않았습니다. 이것의 원인에 대한 단서가 있습니까? 필요한 경우 추가 정보를 제공 할 것입니다. 감사합니다. .

답변

5

한 번에 하나의 스트림을 읽는 중입니다. 다른 스트림이 버퍼를 가득 채우면, 프로세스는 읽는 것을 기다리는 것을 멈추게됩니다. 해결 방법은 다른 스레드에서 스트림을 읽거나 사용하는 것입니다. ProcessBuilder.redirectErrorStream

관련 문제