java.net.HttpURLConnection的默认超时记录在哪里?

时间:2018-10-15 19:57:06

标签: java

通过java.net.HttpURLConnection类,您可以设置连接超时和读取超时。但是,如果未指定读取超时和连接超时的值,则Javadoc页面不会指定。

是否在任何地方记录了默认的连接和读取超时?我可以通过编写一个简单的程序凭经验确定它们:

public static void main(String[] args) {
    try {
        URL url = new URL("http://www.example.com");
        URLConnection conn = url.openConnection();
        System.out.println(String.format("connection timeout: %d", conn.getConnectTimeout()));
        System.out.println(String.format("read timeout: %d", conn.getReadTimeout()));
    } catch (IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
}

(在MacOS和Linux上,对于我运行的Java 1.8版本,它们都是0,表示没有超时)。

但是,我真正想要的是一个带有官方文档的URL。

1 个答案:

答案 0 :(得分:2)

HttpUrlConnectionUrlConnection继承超时字段和getter / setter方法

http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/net/URLConnection.java

/**

 * @since 1.5

 */

private int connectTimeout;
private int readTimeout;

由于从未在声明中为它们分配其他值,因此它们为0。文档明确提到非标准实现可以选择完全忽略超时变量,并定义其自己的实现或字段或静态值。

Sun's implementation of HttpURLConnection does this.

/* Redefine timeouts from java.net.URLConnection as we need -1 to mean
 * not set. This is to ensure backward compatibility.
 */
private int connectTimeout = NetworkClient.DEFAULT_CONNECT_TIMEOUT;
private int readTimeout = NetworkClient.DEFAULT_READ_TIMEOUT;