未关闭InputStream导致Tomcat意外死掉,重启后java.io.EOFException异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了未关闭InputStream导致Tomcat意外死掉,重启后java.io.EOFException异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1894字,纯文字阅读大概需要3分钟。
内容图文
问题背景:通过struts2 注解方式 实现zip文件下载
错误代码:
Struts 注解代码:
@Result(name = "downloadFile", type = StreamResult.class, value = "inputStream",params = { "contentType", "application/octet-stream", "inputName", "inputStream", "contentDisposition", "attachment;filename=\"${fileName}\"", "bufferSize", "4096"})
inputStream的返回值方法:
/**
* 功能描述:返回下载文件流-另一种写法
* 注:此方法若不关闭返回的InputStream,则会导致Tomcat意外死掉
* @return
*/
public InputStream getInputStream() {
String filePath = ServletActionContext.getServletContext().getRealPath("/downloadFile") + "//" + fileName;
try {
setFileName(new String(fileName.getBytes(), "ISO-8859-1") );
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
return new FileInputStream(filePath);// 直接将文件流返回
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
?错误原因:将FileInputStream返回后,并没有将此stream close掉,需要说明的是程序里打开的文件IO资源不属于内存里的资源,而且java的垃圾回收机制也无法回收该资源,所有应该显示关闭文件IO资源。
修改后的代码:
/**
* 功能描述:返回下载文件流
* 注:此方法若不关闭返回的InputStream,则会导致Tomcat意外死掉
* @return
*/
public InputStream getInputStream() {
String filePath = ServletActionContext.getServletContext().getRealPath("/downloadFile") + "//" + fileName;
try {
setFileName(new String(fileName.getBytes(), "ISO-8859-1") );
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
InputStream stream = null;
try {
// return new FileInputStream(new File(filePath));
stream = new FileInputStream(filePath);//
return stream;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{// 正确写法必须要close inputStream
try {
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
?若java的版本高于7(包括7),java7改写了所有的IO资源类,他们都实现了AutoCloseable接口,因此也可通过自动关闭资源的try语句来关闭这IO流。
原文:http://1021082712.iteye.com/blog/2177534
内容总结
以上是互联网集市为您收集整理的未关闭InputStream导致Tomcat意外死掉,重启后java.io.EOFException异常全部内容,希望文章能够帮你解决未关闭InputStream导致Tomcat意外死掉,重启后java.io.EOFException异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。