使用HttpEntity的consumeContent()

在Android中使用class或org.apache.http.HttpEntity的consumeContent()的目的是什么?

什么时候应该使用它可以有副作用吗?

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

正如@Sotirios建议的那样, HttpEntity.consumeContent()已被弃用,因此请在可行时使用EntityUtils.consume(HttpEntity)

然后让我们广泛谈论消费HttpEntity 。 使用HttpEntity可确保分配给此实体的所有资源都已取消分配。 这意味着:

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

什么时候应该使用它?

您应该在不再需要时释放连接资源。 消费HttpEntity正是这样做的。

它有副作用吗?

我不知道消耗HttpEntity的任何副作用。

正如您在javadoc中看到的那样,该方法已被弃用。 不要使用它。 它依赖于实现。 但它应按照描述实施:

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

相反,您应该使用EntityUtils.consume(HttpEntity) ,这是实现的

 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