【发布时间】:2018-05-01 01:10:40
【问题描述】:
我想将InputStream的内容读入String:
private String readToString(InputStream stream) {
return new BufferedReader(new InputStreamReader(stream))
.lines().collect(Collectors.joining("\n"));
}
流来自java.lang.Process。
问题:在这种情况下,我是否必须明确关闭 InputStream、InputStreamReader 或 BufferedReader 中的任何一个?
旁注:链接的问题 NOT 重复,因为我的问题是关于 HOW 正确关闭流,而不是如何将流读取到字符串!
【问题讨论】:
-
javadoc for
lines似乎暗示流不会自动关闭。 -
不要关闭任何东西。如果关闭 BufferedReader 或 InputStreamReader,它们也会隐式关闭 InputStream。但这个责任应该由打开它的人承担(最好是在 try-with-resources 中)。此外,如果您想将整个文本读入一个字符串,请不要逐行阅读,只是为了将这些行重新组合成一个字符串。换行符没有什么特别之处,这应该意味着文件必须像这样拆分。相反,将整个文件读取为字节并使用您选择的编码将它们转换为字符。
-
@KlitosKyriacou 这个问题是从 2008 年开始的,已经快 10 年了
-
@DodgyCodeException 实际上,即使问题很旧,其中的一些答案也是最近的!其中一个答案使用 Java 9 功能。
-
我刚刚看到您的编辑,并认为您认为这个问题不是重复的。我撤回了我的近距离投票。
标签: java java-8 inputstream bufferedreader