2016-06-12 79 views
1

這是很常見的得到的URLConnection的InputStream像這樣:URLConnection的getInputStream()每次都返回相同的InputStream嗎?

InputStream stream = connection.getInputStream(); 

,其中連接是URLConnection

https://developer.android.com/reference/java/net/URLConnection.html#getInputStream()

我有一個情況,我想重用流。我有權訪問連接對象,現在我的問題是URLConnection的單個實例每次都返回「相同的」InputStream嗎?這就是說,如果我再次調用connection.getInputStream()(但對於同一個連接對象),我會得到一個新的流?

回答

1

一般來說,這種問題的答案(「X做Y?」)是:文檔 X是Y嗎?如果是這樣,是的(或者它已經壞了);如果沒有,你沒有保證,並且必須假設沒有。

那麼讓我們來看看URLConnection#getInputStream's documentation

返回從此打開的連接讀取的輸入流。如果讀取超時在數據可供讀取之前到期,則從返回的輸入流讀取時可能會拋出SocketTimeoutException。

返回:

從此打開的連接讀取的輸入流。

所以你不能依靠這樣做,因爲它不承諾。 (我也看了在JavaDoc別處URLConnection

(我的Android之外的測試表明,HttpURLConnection確實至少在某些時候,雖然)。

0

URLConnection是一個接口,這一切都取決於如果getInputStream實現者返回一個新的流或不。

驗證這一點,最好的辦法...

URLConnection con = new URL(MY_URL_STRING).openConnection() ; 
InputStream in1 = con.getInputStream(); 
InputStream in2 = con.getInputStream(); 
boolean streamEquals = in1.equals(in2); 
0

沒關係。不管它做了還是沒有做,都沒有什麼區別。考慮一種總是返回new DataInputStream(socket.getInputStream())的方法。 (我並沒有聲稱就是這樣實現的:我們只是在考慮)。你可以用這個流做什麼沒有什麼實際的作用,只是將它與==進行比較,它會告訴你它是否每次都是新流或者始終是同一個流。你讀出的內容不受影響。

相關問題