Java 如何检查URLConnection是否已处于连接状态?

Java 如何检查URLConnection是否已处于连接状态?,java,urlconnection,Java,Urlconnection,我想检查Java中URLConnection的连接状态 我想写一个toString(URLConnection)方法来打印连接的所有头数据(请求和响应) 但是toString()方法应该只在连接已经建立时打印响应数据 这里的问题是,一旦调用访问响应数据的任何getter或方法,就会建立连接 因此,我不能简单地调用getHeaderFields(),因为这实际上会触发连接。此帮助器方法不应影响URLConnection的内部状态。它应该只是被动地从中读取数据(已经存在),并跳过尚未加载的部分 因此

我想检查Java中URLConnection的连接状态

我想写一个
toString(URLConnection)
方法来打印连接的所有头数据(请求和响应)

但是
toString()
方法应该只在连接已经建立时打印响应数据

这里的问题是,一旦调用访问响应数据的任何getter或方法,就会建立连接

因此,我不能简单地调用getHeaderFields(),因为这实际上会触发连接。此帮助器方法不应影响URLConnection的内部状态。它应该只是被动地从中读取数据(已经存在),并跳过尚未加载的部分


因此,简而言之,在访问触发connect()的任何方法之前,我需要一种方法来检查URLConnection是否已经处于连接状态。

由于
setDoOutput(boolean)
()方法的性质,它可以用于检测如下内部状态:

public static boolean isConnected(URLConnection con) {
    try {
        con.setDoOutput(con.getDoOutput()); // throws IllegalStateException if connected
        return false;
    } catch (IllegalStateException e) {
        return true;
    }
}
以下是该方法的当前实施情况,以供参考:

public void setDoOutput(boolean dooutput) {
    if (connected)
        throw new IllegalStateException("Already connected");
    doOutput = dooutput;
}

创建
URLConnection
的子类,在该子类中,您可以访问
connected
字段,该字段具有
protected
访问修饰符

除此之外,如果连接已经建立,您可以调用引发异常的方法之一,如
uc.setDefaultUseCaches(uc.getDefaultUseCaches())
并捕获异常,或者使用反射来获取
connected
字段的值