第二次访问 - >来自URLConnection的getInputStream()有504异常

时间:2013-02-28 11:28:10

标签: java jsp url httpurlconnection

在第二次从URLConnection获取输入流时获取504异常。当我访问特定URL时我的系统重新启动它运行良好,但第二次访问时它会抛出错误。

注意:

Using Tomcat 6, Java, JSP

代码如下:

    OutputStream outStream = null;
    URLConnection uCon = null;

    InputStream is = null;
    try {
        URL Url;
        byte[] buf;
        int ByteRead, ByteWritten = 0;
        Url = new URL("www.sample.com/download/file.xml");
        outStream = new BufferedOutputStream(new FileOutputStream("/home/temp/myfile.xml"));

        uCon = Url.openConnection();
        is = uCon.getInputStream();
        buf = new byte[size];
        while ((ByteRead = is.read(buf)) != -1) {
            outStream.write(buf, 0, ByteRead);
            ByteWritten += ByteRead;
        }
        System.out.println("Downloaded Successfully.");
        is.close();
        outStream.close();
    } catch (Exception e) {
        System.out.println("Required File is not there  "+e.getMessage());            
    }

2 个答案:

答案 0 :(得分:3)

读完流后,您已阅读了该流。您不能多次重新读取流,而不调用mark()reset()方法,并且您正在使用的InputStream类的实现应首先实际支持此方法。

除此之外:

  • 您的try-catch语句需要:
    • 要捕获正确的异常,而不仅仅是抛出Exception,而是 - IOExceptionURLException或其他任何相关的(如果你的话,你的IDE会为你推荐/解决这个问题)删除catch (Exception e)块。
    • 一个finally块,用于检查流是否为空并关闭它们。
  • 您的方法应该抛出IOException。

答案 1 :(得分:0)

也许您没有以正确的方式关闭输入流或输出流。 始终使用

finally { 
    is.close(); 
    outputStream.close()
}