在阅读了关于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 –
你碰巧有你的观点文件吗? –