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上,对于我运行的Java1.8版本,它们都是0
,这意味着没有超时)。
然而,我真正想要的是一个有官方文档的URL。
发布于 2018-10-16 04:22:28
HttpUrlConnection
从UrlConnection
继承超时字段和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;
https://stackoverflow.com/questions/52823893
复制相似问题