我正在编写一个使用HttpURLConnection下载某些数据的Android应用。 getInputStream()方法返回一个我可以从中读取数据的InputStream。在我从这个流中读取数据之前存储的数据在哪里?是全部下载并且网络堆栈正在处理它吗?或者是否仍然需要从服务器检索数据?我可以关闭连接并仍然从InputStream中读取吗?我的问题是在性能方面,并在数据很大的情况下做出负责任的事情。
答案 0 :(得分:2)
在从此流中读取数据之前存储的数据在哪里?
(我不知道。你必须阅读源代码。)
是否全部下载并且网络堆栈正在处理它?</ p>
不,这是一个流。数据以字节流的形式到达,您可以从流中读取。
或者是否仍有需要从服务器检索的数据?
是的,这是正常情况,特别是当有效负载超过几千字节时。
我可以关闭连接并仍然从InputStream中读取吗?
简短回答:不。
您的意思是从disconnect()
致电HttpURLConnection
?不确定是否可能,但我不会这样做。它表示您不希望在不久的将来发出后续请求。这可能意味着连接将在物理上关闭。
或者你的意思是打电话给InputStream.close()
?我确信当您尝试从封闭的流中读取时,您会得到某种IllegalStateException
或IOException
。
通常HttpURLConnection
是您应用的不错选择。如果您遇到任何问题,可以查看这个(不完整的)list of libraries and helpers,您可以使用它来在Android上执行HTTP请求时让您的生活更轻松。也许你可以利用android.app.DownloadManager。