2013-12-17 2 views
0

I'am пытается написать InputStream изображение для OutputStream, чтобы отобразить изображение в браузере это код:Java IOException при попытке скопировать InputStream в 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 

какие-нибудь идеи?

ответ

5

В примерочной с-ресурсы закрывает поток при выходе из блока

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

т.е.. когда ваш метод возвращается.

Просто удалите его и позаботьтесь о закрытии потока в конце вашего тела другого метода.

Как указано в комментариях, here's a link to the official tutorial on try-with-resources.

+1

[ссылка на документ] (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose. html) было бы неплохо иметь в вашем ответе. –

1

Взятые из oracle tutorial ресурс закрыт, когда оператор завершает:

Заявление примерочных с-ресурсами гарантирует, что каждый ресурс закрыт в конце заявления. В качестве ресурса может использоваться любой объект, реализующий java.lang.AutoCloseable, который включает в себя все объекты, которые реализуют java.io.Closeable.

До Java SE 7 вы можете использовать блок finally, чтобы гарантировать, что ресурс закрыт независимо от того, завершает ли оператор try нормально или внезапно. В следующем примере вместо утверждения try-with-resources используется блок finally:

Смежные вопросы