2014-07-25 42 views
2

我正在寫一個使用HttpURLConnection下載一些數據的Android應用程序。 getInputStream()方法返回一個可以從中讀取數據的InputStream。我從這個流中讀取之前存儲的數據在哪裏?是否全部下載並且網絡堆棧正在照顧它?或者仍然有可能需要從服務器檢索數據?我可以關閉連接並仍然從InputStream中讀取嗎?我的問題是在性能方面,並且在數據量大的情況下做一些負責任的事情。在讀取之前,由HttpURLConnection返回的InputStream中的數據存儲在哪裏?

回答

2

從這個流中讀取之前存儲的數據在哪裏?

(我不知道。你必須閱讀源代碼。)

它是所有下載和網絡堆棧正在舉行關於它照顧?

不,這是一個流。數據以字節流形式到達,您可以從流中讀取數據。

或者是否仍然有數據需要從服務器中檢索?

是的,這是正常情況,特別是當有效載荷重量超過幾千字節時。

我可以關閉連接並仍然從InputStream中讀取嗎?

簡短的回答:第

你的意思是呼籲從HttpURLConnectiondisconnect()?不知道是否有可能,但我不會那樣做。這表明你不想在不久的將來發出後續請求。這可能意味着連接將在物理上關閉。

還是你的意思是叫InputStream.close()?我很確定,當您嘗試從封閉的流中讀取時,您會得到某種IllegalStateExceptionIOException


通常HttpURLConnection是您的應用程序的不錯選擇。如果您遇到任何問題,您可以查看此(不完整)list of libraries and helpers,您可以使用它來使您在Android上執行HTTP請求時更輕鬆。也許你可以利用android.app.DownloadManager