【发布时间】:2023-03-07 22:10:01
【问题描述】:
InputStream 作为参数从某处传递,在那里它将被进一步处理然后关闭。所以我不想在这里关闭InputStream。考虑以下代码:
void readInputStream(final InputStream inputStream) {
final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = bufferedReader.readLine() != null) {
// do my thing
}
}
根据 Stackoverflow 的另一篇文章,如果我关闭 BufferedReader 和/或 InputStreamReader,那么底层的 InputStream 也将关闭。
我的问题:读者是否需要关闭,即使底层 InputStream 已在其他地方关闭?不关闭 Readers 会导致内存泄漏吗?
【问题讨论】:
-
我不完全理解您的问题,但一般来说,一旦您使用完这些资源,就应该关闭它们。另外我建议看一下try-with-resources,它会自动为你关闭它们。最后你的代码 sn-p 不是最适合这个问题的。
-
你的方法不应该创建自己的
BufferedReader,而是接受它作为参数。这样,您的应用程序中就会有 一个 BufferedReader 并且可以在不再需要它时关闭它,这也将关闭底层InputStream。 -
@Pshemo InputStream 被传递给不同的处理程序,这些处理程序用它做不同的事情。每次它在之前重置(并在最后关闭)。只有这个处理程序实际上需要一个 BufferedReader,另一个处理程序只是将 InputStream 传递给一个库函数等等。
标签: java memory memory-management bufferedreader inputstreamreader