2012-08-27 48 views
1

我在Android上使用java.net.HttpURLConnection(API 16)。我使用connect(),然後getInputStream()獲取InputStream以從連接中讀取數據。我使用InputStream(即消耗數據)後,我close()它。使用連接後需要調用java.net.HttpURLConnection.disconnect()嗎?

現在的問題是:這是否也關閉了底層的HttpURLConnection(好像通過調用disconnect()就可以了)?我的猜測不是,但我只是想確認一下。更一般的問題是:當連接不再有用時,是否需要調用java.net.HttpURLConnection.disconnect()?

事情是我有一個方法來打開一個給定的主機HttpURLConnection。簽名是:InputStream OpenHttpConnection(String stringURL, String method)。這返回一個InputStream,調用者用來從連接中讀取數據,但如果我從該方法的主體中調用disconnect(),那麼InputStream會關閉並且變得沒用(我已經證實了這一點)。但是,如果另一方面,當我從調用者呼叫InputStream上的close()時,連接沒有關閉,那麼我將有一個連接浪費資源。

有什麼建議嗎?

回答

7

調用disconnect()確實會關閉基礎流(如果它們仍處於打開狀態),但它還會將連接的資源釋放回連接緩衝池,所以在您可以調用它時仍然是一個好主意(並且已完成連接),即使你在其他地方離散地關閉流。

+0

但它不會反過來工作,是嗎?即關閉底層的流(在這種情況下是'InputStream'),不'disconnect(')'HttpURLConnection',對嗎? – sroj

+0

這是正確的。 – Devunwired

+0

謝謝。那麼你有什麼建議,能夠在我的情況下'disconnect()'?鑑於此,一旦'InputStream OpenHttpConnection(String stringURL,String method)'返回,我不再有一個連接的引用(我當然可以用'InputStream'和'HttpURLConnection'返回一個包裝器對象,但也許有一個更優雅的解決方案)。 – sroj

相關問題