我想将 InputStream 的内容读入 String :

private String readToString(InputStream stream) {
    return new BufferedReader(new InputStreamReader(stream))
            .lines().collect(Collectors.joining("\n"));
}

流来自 java.lang.Process

问题:在这种情况下,我是否必须明确关闭 InputStreamInputStreamReaderBufferedReader 中的任何一个?

旁注:链接的问题是 而不是 重复,因为我的问题是关于如何正确关闭流,而不是如何将流读取为字符串!

最佳答案

您只需要关闭 outer 包装器,但无论哪种方式都不要明确这样做 - 有 try-with-resource 可以让您的生活更轻松:

public String readToString(InputStream stream) {

    try (InputStreamReader reader = new InputStreamReader(stream);
            BufferedReader br = new BufferedReader(reader)) {

        return br.lines().collect(Collectors.joining("\n"));

    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
}

还有一种更简单的方法可以做到这一点并且更清晰:
Files.readAllLines(YourPath)

关于java - BufferedReader 和 InputStreamReader 是否应该明确关闭?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47347575/

10-12 20:30