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