gpt4 book ai didi

java - BufferedReader.readline() 挂起

转载 作者:太空狗 更新时间:2023-10-29 11:38:48 24 4
gpt4 key购买 nike

我正在尝试运行 /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

关于java - BufferedReader.readline() 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13292608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com