以下代码被卡住(我认为是阻塞I / O)多次(工作一段时间)。
def static executeCurlCommand(URL){
def url = "curl " + URL;
def proc = url.execute();
def output = proc.in.text;
return output;
}
但是当我将代码更改为
时def static executeCurlCommand(URL){
def url = "curl " + URL;
def proc = url.execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err)
return outputStream.toString();
}
每次都很好。我无法理解为什么第一种方式,即proc.in.text
的输入会挂起一段时间?当我在Windows和cygwin上尝试它时,看起来不是特定于环境的问题。
为了测试/运行我尝试的上述方法 -
public static void main(def args){
def url = 'http://mail.google.com';
println("Output : " + executeCurlCommand(url));
}
我在SO上看过多个问题,并且都提供了第二种方法。虽然它运作良好但我希望我知道第一种方法有什么问题?有没有人以前遇到过这种情况?
答案 0 :(得分:5)
第一种方法填充缓冲区,然后阻塞等待更多空间写入输出。
第二种方法是在进程运行时通过单独的线程从缓冲区输出流,因此进程不会阻塞。