【问题标题】:Cannot get InputStream out of HttpEntity无法从 HttpEntity 中获取 InputStream
【发布时间】:2015-07-16 20:08:57
【问题描述】:

我有一个从网络服务器收到的 HttpEntity。如果我用 getContentLength() 检查 HttpEntity,它显示的值 > 0。所以似乎有内容。我运行 getContent() 以获取 InputStream,并在该 InputStream 上运行 read() 以获取内容。在第一次 read() 操作时,它会抛出一个 IO 异常,表明流已关闭“尝试在已关闭的流上读取。”。

我的代码是:

HttpEntity myEntity = myResponse.getEntity();
InputStream inputStream = myEntity.getContent();
inputStream.read();

所以我没有在那个流上调用 close()。我不能排除 HttpEntity 有问题,在我看到的调试器中查看 myEntity(不知道这是否有帮助):

is1=EofSensorInputStream
eofWatcher=BasicManagedEntity
selfClosed=true
wrappedStream=null

InputStream 上的 getContentLength() 显示的值与 HttpEntity 上的值相同。

我不知道从哪里开始寻找解决问题的方法。我可以通过什么检查来发现问题?

【问题讨论】:

  • 您的服务器是否有可能发送的是标头而不是响应的正文?
  • 也许吧。但是我怎样才能知道呢?我无权访问服务器。 contentLength() 是否包含标头而 getContent() 不包含?
  • 我认为内容长度是指标题,但它可能没有收到整个正文。检查有点困难。尝试通过 TCP 套接字发送相同的 HTTP 请求。
  • 春天可能已经“已阅读”

标签: java android httpentity


【解决方案1】:

请参考this link,它说REPEATABLE实体只能使用getContent()writeTo(OutputStream)过程一次。

要了解您的实体是否可重复,请使用isRepeatable()

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2014-04-08
    • 2013-02-20
    • 1970-01-01
    相关资源
    最近更新 更多