我需要在使用commons-io的IOUtils.toString(input)后手动关闭输入流吗?

40

Commons-IO 提供了一个 IOUtils.toString(inputStream) 方法,可以从输入流中读取所有内容:

InputStream input = getInputStream();
String content = IOUtils.toString(input);
我的问题是:在使用完输入流后,我是否需要手动关闭它?我认为,由于IOUtils已经读取了所有内容,因此它可能会自动关闭输入流,但我无法在源代码中找到相关信息。

1
如果你在源代码中找不到它,那么这不是一个强烈的指示它不存在吗? - JB Nizet
对于文件,请使用FileUtils.readFileToString(),它使用IOUtils,但还会关闭流。 - Daniel Hári
2个回答

42

该 javadoc 说明:

在可能的情况下,本类中的方法不会刷新或关闭流。这是为避免对流的来源和进一步使用做出非便携式的假设。因此,调用者仍然有责任在使用后关闭流。


这是基于流的库的传统模式。客户端应该处理它。 - Sotirios Delimanolis
2
谢谢,但我发现当我使用IOUtils.toString读取内容时,除了关闭它之外,我从未需要在输入流上执行其他操作... - Freewind
3
您可以使用FileUtils.readFileToString()来读取文件,并关闭流。 - Daniel Hári

0

是的,InputStream现在是AutoCloseable的,所以你可以这样做:

try(InputStream input = getInputStream()) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接