Java HttpURLConnection和pooling
在阅读了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();
-
是否需要刷新和关闭以使底层套接字可重用?
-
connection.disconnect()
关闭底层套接字(从而使其无法使用)吗?keep-alive
会影响这种行为吗? -
如果我使用不同的URL对象,但使用相同的URL,那么从它们创建的
connection
是否会共享底层套接字? 如果URL的主机部分相同但路径不同,该怎么办? -
什么时候汇集连接会被破坏?
-
什么是控制池大小的系统属性?
此外,如果您还可以将Android版本与Java进行比较,那将会非常棒。
谢谢
- 是否需要刷新和关闭以使底层套接字可重用?
关闭输入流就足够了。 您无法刷新输入流,并在关闭冗余之前刷新输出流。
connection.disconnect()
关闭底层套接字(从而使其无法使用)吗?
它可以作为关闭底层连接的暗示。
keep-alive
会影响这种行为吗?
是。 如果不存在,则必须关闭连接。
- 如果我使用不同的URL对象,但使用相同的URL,那么从它们创建的
connection
是否会共享底层套接字?
是。
如果URL的主机部分相同但路径不同,该怎么办?
是。
- 什么时候汇集连接会被破坏?
空闲超时后。
- 什么是控制池大小的系统属性?
我不知道有一个,但如果有,它将在网络属性页面中定义,您可以通过Javadoc找到它。
此外,如果您还可以将Android版本与Java进行比较,那将会非常棒。
我相信Android根本不会集合,但是当它们切换到OpenJDK源时应该会改变。