commons-io 的 FileUtils.readFileToByteArray 是否关闭了新创建的流?

Does commons-io's FileUtils.readFileToByteArray close the newly created stream?

我正在创建一个程序,为目录中的每个文件生成校验和。我正在使用 FileUtils.readFileToByteArray 内部创建一个新的 FileInputStream。问题是我没有找到关闭流的位置并且想知道可能的内存泄漏。

所以我想问一下:这个方法读取流后会关闭吗?

简短回答:是的,它会关闭流。

稍微长一点的答案: 我们看代码:

try (InputStream in = openInputStream(file)) {
    final long fileLength = file.length();
    // file.length() may return 0 for system-dependent entities, treat 0 as unknown length - see IO-453
    return fileLength > 0 ? IOUtils.toByteArray(in, fileLength) : IOUtils.toByteArray(in);
}

你在这里看到的是 try 括号中打开的 try-with resource syntax. Any AutoClosable(在本例中,FileInputStream)将在 try 时隐式关闭块终止,无论它是正常终止还是通过returning、抛出异常等终止