servlet中输入输出流关闭问题

若_离 2014-04-17 02:42:16
一般情况输入输出流用完肯定需要在finally里面关闭
但是servlet的输入输出流是否用完也必须手动关闭?
比如我需要用到request.getInputStream()
我直接使用 java.util.Properties 的load方法 load(request.getInputStream)
这样不就没法去关闭了,还是必须先定义InputStream in = request.getInputStream()
然后使用load(in),最后使用in.close()?

另外,JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方法
是否意味着不管怎样去包装,其实只需要关闭最外面的流就可以了?
或者最外面的流最终调用的也是被包装的close()方法,那么我直接关闭最里层流就可以了?
如果只需要关闭最里层的,而外面的close()方法又调用的是被包装的close(),那是否就意味着关闭任意一个流就可以了?
...全文
532 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
-江沐风- 2014-04-17
  • 打赏
  • 举报
回复
最好是按照顺序,都关闭吧,这样可以避免一些不必要的麻烦;
小灯光环 2014-04-17
  • 打赏
  • 举报
回复
引用 3 楼 zhufengwnsh 的回复:
引用 2 楼 wlwlwlwl015 的回复:
是的。输出流用完记得 flush+close
request.getInputStream 不能直接使用?需要先定义InputStream in = request.getInputStream(); 然后in.close()? 被包装的输入输出流,任意关一个就够了吗?
只要你用到的流都要关,你可以in.close(),也可以request.getInputStream().close().
若_离 2014-04-17
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
真确的。应该要按照顺序,
额,我说了很多情况,都是有疑问的,不知道你说哪个是正确的 第一:request.getInputStream 不能直接使用?需要先定义InputStream in = request.getInputStream(); 然后in.close()? 第二:被包装的输入输出流,任意关一个就够了吗?还是要按照顺序,从里面到外面每个都关闭
若_离 2014-04-17
  • 打赏
  • 举报
回复
引用 2 楼 wlwlwlwl015 的回复:
是的。输出流用完记得 flush+close
request.getInputStream 不能直接使用?需要先定义InputStream in = request.getInputStream(); 然后in.close()? 被包装的输入输出流,任意关一个就够了吗?
小灯光环 2014-04-17
  • 打赏
  • 举报
回复
是的。输出流用完记得 flush+close
tony4geek 2014-04-17
  • 打赏
  • 举报
回复
真确的。应该要按照顺序,

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧