我正在尝试将输入流图像写入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
任何想法?
答案 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语句: