我有一个日志文件,我想用它们的每一行创建一个LogMessage
对象。我想从文件中流出行,并将每个行映射到新的LogMessage
。下面的代码工作,但是Eclipse发出警告:将一个流映射到另一个流,并在第二个关闭时关闭第一个流
资源泄漏:“lineStream”永远不会关闭
public static Stream<LogMessage> streamSingleLineLogMessages(Path path) {
try {
Stream<String> lineStream = Files.lines(path, StandardCharsets.ISO_8859_1);
Stream<LogMessage> logMessageStream =
lineStream.map(message -> new LogMessage(path, message));
logMessageStream.onClose(lineStream::close);
return logMessageStream;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
如果我添加一个finally
块,并在那里将其关闭,那么当方法返回时,流关闭(我认为)。无论如何,它在我开始使用它时会关闭。
那么确保内部流关闭的最佳方法是什么?或者也许代码是正确的,但Eclipse没有意识到它?
原来的资源泄漏分析尚未更新为Java 8的方法引用。我提交了https://bugs.eclipse.org/486506 –