在閱讀了關於Java HttpURLConnection的各種文檔之後,我仍然很困惑它是什麼類型的池以及它如何連接。Java HttpURLConnection和池
例如,下面的代碼
URL url = new URL(someUrl);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
OutputStream os = connection.getOutputStream();
InputStream is = connection.getInputStream();
/** Write something to os and flush */
/** Read from is */
os.close();
is.close();
connection.disconnect();
做既
os
和is
需要被刷新,關閉底層套接字是可重複使用的?將
connection.disconnect()
關閉底層套接字(並因此使其不可用)?keep-alive
會影響這種行爲嗎?如果我使用不同的URL對象,但使用相同的URL,那麼從它們創建的
connection
是否共享底層套接字?怎麼樣當URL的主機部分是相同的,但路徑不同?什麼時候會將連接的連接銷燬?
什麼是控制池大小的系統屬性?
此外,如果您還可以比較Android版本和Java,那就太棒了。
感謝
關於第一點,我做了兩個測試,每個測試有10個請求。在第一次測試中,我使用getContent獲得了InputStream並關閉了它。在第二次測試中,我也在關閉之前閱讀整個流。結果對於每一輪中的第二個請求都是不同的:當我關閉InputStream時,其他8個請求(第一個是800ms,第二個是600,其餘的是140ms)相當慢,當時我也只讀了響應第一次花了800,其餘花了140ms。不知道爲什麼會這樣。使用JDK 1.8.0_51。 –
看起來觀察到的行爲與JDK 1.6中引入的http.KeepAlive.remainingData有關。 http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.html –
你碰巧有你的觀點文件嗎? –