java流关闭在什么情况下一定需要关闭

代码如下

DigestUtils.md5Hex(new FileInputStream(path));

new FileInputStream会启动个流,这个流需要关闭吗?
如果需要关闭,代码编程这样

InputStream inputStream = null;
String md5Hex = null;
try {
  inputStream = new FileInputStream(docPath);
  md5Hex = DigestUtils.md5Hex(inputStream);
} catch (FileNotFoundException e1) {
  e1.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
} finally {
  if (inputStream != null) {
    try {
      inputStream.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

我还发现
DigestUtils.md5Hex执行之之前inputStream.available();有值,执行后inputStream.available();的值变为0,是不是inputStream.available();的值为0就不需要关闭流

阅读 4.5k
2 个回答

稍微思考了一下楼主提出的available方法返回值不存在的情况。我觉得之所以不一样可能是io的作用机制产生的。据我了解,在1.5之后NIO出现,NIO使用轮询进行数据的读取,而当数据传输完成的时候,可能channel被标为不可用状态,进而前后返回不一致。
而回到楼主的问题,任何流在使用完之后吧必须被关闭。因为流对应的是与外界交互的手段,而这个外界的速度与程序所处的内存相比要慢得多,在demo环境可能体现不出,但是在实际应用这个关闭的操作可以节省很多资源。另外,在1.7之后,IO很多都实现了AutoClosable接口,可以在try块中声明并自动回收,具体用法可以求助百度。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题