尝试将inputstream复制到outputstream时出现Java IOException

时间:2013-12-17 18:07:24

标签: java exception inputstream ioexception outputstream

我正在尝试将输入流图像写入OutputStream以在浏览器中显示图像,这是代码:

try
{
    InputStream input = Filer.readImage("images/test.jpg");
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = input.read(buffer)) != -1)
    {
        responseBody.write(buffer, 0, bytesRead);
    }
}
catch(IOException e)
{
    System.out.println(e);
}

readImage:

public static InputStream readImage(String file) throws IOException {
    try (InputStream input = new FileInputStream(file)) {

        return input;
    }
}

但写作时出错:

java.io.IOException: Stream Closed

任何想法?

2 个答案:

答案 0 :(得分:5)

当您退出块时,try-with-resources将关闭流

try (InputStream input = new FileInputStream(file)) {

即。当你的方法返回时。

只需删除它,并在其他方法体的末尾处理关闭流。

如评论中所述,here's a link to the official tutorial on try-with-resources

答案 1 :(得分:1)

oracle tutorial获取资源在语句完成时关闭:

  

try-with-resources语句确保在语句结束时关闭每个资源。实现java.lang.AutoCloseable的任何对象(包括实现java.io.Closeable的所有对象)都可以用作资源。

     

在Java SE 7之前,您可以使用finally块来确保关闭资源,无论try语句是正常还是突然完成。以下示例使用finally块而不是try-with-resources语句: