首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >consumeContent()的HttpEntity用法

consumeContent()的HttpEntity用法
EN

Stack Overflow用户
提问于 2014-02-16 23:20:02
回答 2查看 7.5K关注 0票数 2

在安卓系统中,类consumeContent()org.apache.http.HttpEntity的目的是什么?

什么时候应该使用它,它会有副作用吗?

我正在尝试修复一个应用程序中的一个bug,该应用程序使用HttpClient向服务器发出请求,有时如果一个特定请求失败,它将随后失败,尽管互联网是安全的。应用程序在输入流读取结束时调用此方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-17 00:29:57

正如@Sotirios建议的那样,HttpEntity.consumeContent()是不推荐的,因此在可行时请使用EntityUtils.consume(HttpEntity)

然后,让我们泛泛地讨论一下如何使用HttpEntity。使用HttpEntity可以确保所有分配给该实体的资源都被取消分配。这意味着:

  • 底层流被释放。
  • 如果您的连接是池的,则连接对象将被返回给池。如果您的连接没有池,连接管理器将释放存在问题的连接对象,并专注于处理其他客户端请求。

什么时候该用呢?

当不再需要连接资源时,您应该释放它们。使用HttpEntity可以为您做到这一点。

会有副作用吗?

我不知道服用HttpEntity有什么副作用。

票数 6
EN

Stack Overflow用户

发布于 2014-02-16 23:25:43

正如您在javadoc中所看到的那样,不推荐使用该方法。别用它。它依赖于实现。但应按所述加以实施:

调用此方法是为了指示不再需要此实体的内容。由于此方法调用,所有实体实现都将释放所有分配的资源。

相反,您应该使用EntityUtils.consume(HttpEntity),它的实现方式如下

代码语言:javascript
复制
public static void consume(final HttpEntity entity) throws IOException {
    if (entity == null) {
        return;
    }
    if (entity.isStreaming()) {
        final InputStream instream = entity.getContent();
        if (instream != null) {
            instream.close();
        }
    }
} 

如果有必要,它只是简单地关闭底层InputStream

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21818169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档