HttpURLConnection 返回的 InputStream 中的数据在你读取之前存储在哪里?
Posted
技术标签:
【中文标题】HttpURLConnection 返回的 InputStream 中的数据在你读取之前存储在哪里?【英文标题】:Where is the data in the InputStream returned by HttpURLConnection stored before you read it? 【发布时间】:2014-09-17 16:30:54 【问题描述】:我正在编写一个使用HttpURLConnection 下载一些数据的安卓应用。 getInputStream() 方法返回一个 InputStream,我可以从中读取数据。在我从这个流中读取之前,数据存储在哪里?是否已全部下载并且网络堆栈正在处理它?或者是否还有需要从服务器检索的数据?我可以关闭连接并仍然从 InputStream 中读取吗?我的问题是关于性能和在数据很大的情况下做一些负责任的事情。
【问题讨论】:
【参考方案1】:在我从这个流中读取之前,数据存储在哪里?
(我不知道。你必须阅读源代码。)
它是否已全部下载,并且网络堆栈正在负责保存它?
不,它是一个流。数据以字节流的形式到达,您可以从流中读取。
或者是否还有需要从服务器检索的数据?
是的,这是正常情况,尤其是当负载重量超过几千字节时。
我可以关闭连接并仍然从 InputStream 中读取数据吗?
简短回答:不。
您的意思是从HttpURLConnection
呼叫disconnect()
?不确定这是否可能,但我不会那样做。它表示您不想在不久的将来发出后续请求。这可能意味着连接将在物理上关闭。
或者你的意思是打电话给InputStream.close()
?我很确定当您尝试从封闭的流中读取时,您会得到某种 IllegalStateException
或 IOException
。
通常HttpURLConnection
是您应用的不错选择。如果您遇到任何问题,可以查看这个(不完整)list of libraries and helpers,您可以在 android 上执行 HTTP 请求时使用它来让您的生活更轻松。也许您可以利用android.app.DownloadManager。
【讨论】:
以上是关于HttpURLConnection 返回的 InputStream 中的数据在你读取之前存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
HttpURLConnection.getResponseCode() 在第二次调用时返回 -1
HttpURLConnection 返回汉字乱码(全是问号)
HttpURLConnection 返回的 InputStream 中的数据在你读取之前存储在哪里?