使用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
。