我有一個日誌文件,我想用它們的每一行創建一個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 –