url.openStream有害吗?

时间:2010-06-07 02:24:53

标签: java networking

我使用java.net.URL.openStream()方法从服务器检索内容。我最近遇到了一个问题,其中HTTP响应代码指示错误,但不是抛出异常,无论如何仍然读取了流。这导致错误出现在执行的后期,并证明是一个红鲱鱼。据我所知,当您使用此方法打开流时,无法检查HTTP响应代码。

我能找到正确处理此问题的唯一方法是在打开流之前获取连接

HttpURLConnection conn=(HttpURLConnection) url.openConnection()
#Code updated with scotth's suggestion
if(!String.valueOf(conn.getResponseCode()).startsWith('2'))
    throw new IOException("Incorrect response code "+conn.getResponseCode()+" Message: " +getResponseMessage());
rawIn=conn.getInputStream()

InputStream in=conn.getInputStream()

所以你同意吗?安全使用openStream是否有任何好的情况,或者不鼓励使用它。值得注意的是,Sun在tutorial code for reading directly from a URL中使用了该方法。然后,代码抛出异常,因此它不是良好编码实践的堡垒。

1 个答案:

答案 0 :(得分:5)

openStream()可以正常工作,如果你希望你的类不受url类型变化的影响 - 例如,在绝对文件路径(file:///),jar包含的资源之间进行更改甚至使用自定义协议处理程序(scotth://foo.bar)也可能是其他协议。

然而,正如你发现它的抽象性非常高,所以如果你想知道关于与资源交互性质的任何细节,你需要openConnection()并按照你认为合适的方式进行投射

Re:其他状态代码 - 你可能想看一眼RFC2616 - 如果你关心的只是“成功”,你可以检查String.valueOf(conn.getResponseCode()).startsWith('2')