将HttpInputStream插入到groovy中的OutputStream中

时间:2013-03-14 16:58:24

标签: groovy inputstream outputstream

如果

之间存在Groovy的差异
IOUtils.copyLarge(content, output)

output << content

其中output是OutputStream对象,而content是HttpInputStream。

另外,希望我能正确地从连接中获取信息

def connection = (HttpURLConnection)(new URL(myURL).openConnection())
def content = connection.getContent()

提前感谢您的提示!

1 个答案:

答案 0 :(得分:2)

假设您指的是来自Apache的commons-io库的IOUtils,那么查看各个来源会发现Apache的IOUtils.copyLarge和Groovy的OutputStream.leftShift之间的关键区别(又名{{1} }),即Groovy的调用<<

https://github.com/groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/runtime/IOGroovyMethods.java#L207

在这种情况下,当没有从Thread.yield();读取任何东西但它尚未到达它的结尾时,线程将暂停,允许其他线程继续,而IOUtils将简单地阻塞其线程,直到它完成处理InputStream。这意味着Groovy的InputStream运算符的行为可能与<<不同,具体取决于您当时运行的其他线程及其相对优先级。

IOUtils.copyLarge实际上返回HttpURLConnection.getContent()的类型。这可能是Object,但可能不是这样,你应该用以下方式验证该对象的类型:

HttpInputStream